我必须设置我的硒框架才能从中读取测试用例 要运行的测试轨并在运行时获取其ID,然后仅运行 那些测试用例。
但问题是:
业务分析师团队只会选择测试用例 运行并将它们拖到测试轨道的测试运行部分,然后想要一个 他们可以双击的批处理文件,硒应该启动 运行选定的测试用例。
所以我可以从 测试轨道,但我如何在运行时将其传递给testng.xml
通过批处理文件启动?
我有多个用于不同应用程序的测试文件,但是 硒脚本在 1 个单个项目文件夹中。
这是我的示例测试.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:AutomationSFAutomatedTestCasesusingSelniumrunFromTestRailCAanzAutomation
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,但是我该如何传递 它在运行时进行测试,然后在测试中跳过测试用例,这些测试用例是 我的阵列中不存在?
您可以使用 TestNG 侦听器来实现此目的。在这种情况下,方法选择器或方法拦截器都最适合。您可以使用测试轨中的测试用例 ID 检查自定义注释或方法名称中的值。
为简单起见,假设您的方法名称为test_<testrailid>
。现在,在侦听器中,仅当方法名称以从 api 调用获取的 id 结尾时,您才能包含方法。下面是拦截器的示例。
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来拥有方法选择器。实现方法选择器时,需要使用方法选择器而不是侦听器来注册它。