0

我必须设置我的 selenium 框架来从 testrail 读取测试用例以运行并在运行时获取它们的 id,然后只运行那些测试用例。

但问题是:

业务分析师团队只会选择要运行的测试用例并将它们拖到测试轨道的测试运行部分,然后想要一个批处理文件,他们可以双击该批处理文件,selenium 应该开始运行选定的测试用例。

所以我可以从测试轨道读取需要使用 selenium 运行的测试用例,但是如何testng.xml在运行时将它传递给我通过批处理文件启动的?

我有多个用于不同应用程序的 testng 文件,但 selenium 脚本位于 1 个单个项目文件夹中。

这是我的示例testng.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false">
  <test name="Test">
    <classes>
      <class name="com.SalesForce.Testone" />
      <class name="com.SalesForce.Testtwo" />
      <class name="com.SalesForce.Testthree" />
    </classes>
  </test>
  <!-- Test -->
</suite>
<!-- Suite -->

以下是我的批处理文件集代码

 projectLocation=H:\Automation\SF\AutomatedTestCases\usingSelnium\runFromTestRail\CAanzAutomation
 cd %projectLocation% set
 classpath=%projectLocation%\bin;%projectLocation%\resources\* java
 org.testng.TestNG %projectLocation%\testng.xml pause
 APIClient client = new APIClient("https://abc.testrail.io/");
 client.setUser("email id");
 client.setPassword("password");
 JSONObject c = (JSONObject) client.sendGet("get_case/4");
 System.out.println(c.get("id"));

我可以存储从上面的代码中获得的 id,但是如何在运行时将其传递给测试,然后在测试中跳过我的数组中不存在的测试用例?

4

1 回答 1

0

您可以为此目的使用 TestNG 侦听器。方法选择器或方法拦截器最适合这种情况。您可以使用测试轨道中的测试用例 id 从自定义注释或方法名称中检查值。

为简单起见,我们假设您的方法名称为test_<testrailid>. 现在在侦听器中,只有当方法名称以从 api 调用获取的 id(s) 结尾时,您才能包含方法。下面是拦截器的示例。

public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {

  APIClient client = new APIClient("https://abc.testrail.io/");
  client.setUser("email id");
  client.setPassword("password");
  JSONObject c = (JSONObject) client.sendGet("get_case/4");
  String id = "_"+c.get("id");

  List<IMethodInstance> result = new ArrayList<IMethodInstance>();

  for (IMethodInstance m : methods) {
    if (m.getMethod().getMethodName().endsWith(id)) {
      result.add(m);
    }
  }
  return result;
}

同样,您也可以通过实现IMethodSelector来拥有方法选择器。当您实现方法选择器时,您需要使用方法选择器而不是侦听器来注册它。

于 2019-03-31T04:09:58.060 回答