【发布时间】:2018-02-15 12:39:47
【问题描述】:
我是 TestNG 的初学者。我目前在一家公司工作,他们有一个本土的 api 自动化框架。我习惯于在本地和使用 Cucumber 时单独运行我的测试用例。然而,在这个框架中,事情是非常紧密耦合的。让我简要介绍一下框架的不同方面:
测试数据管理: 测试数据通过属性文件读取。所有测试用例数据都使用每个 api 模块的键值列在属性中。键的编号方式是按测试用例类型和附加的计数器。比如:
example.properties
.....
.....
getTestCase38=TC_ID_38
getDescription38= Description_38
getUserID38=<some value>
getUserType38=<some value>
expectedUserType38=<some value>
getTestCase39=TC_ID_39
getDescription39= Description_39
getUserID39=<some value>
getUserType39=<some value>
expectedUserType39=<some value>
postTestCase1=TC_ID_1
postDescription1= Description_1
postUserID1=<some value>
postUserType1=<some value>
expectedUserType1=<some value>
...
...
测试数据流: 从属性文件中读取数据。一个属性文件映射到一个 TestNG 类。 TestNG 类中这些方法的命名约定如下:
public class ModuleA extends ModuleACommon{
int getcount = 0;
int postcount = 0;
@Test(priority=20)
public void testMoudleAGetPositive38(){
callMethodToReadData(getcount++);
....
}
@Test(priority=21)
public void testModuleAGetPositive39(){
callMethodToReadData(getcount++);
....
....
}
......
......
@Test(priority=30)
public void testModuleAPostPositive1(){
callMethodToReadData(postcount++);
....
....
}
......
......
}
请注意,当调用callMethodToReadData 时,计数会增加,并用于构建密钥以访问属性文件中的测试数据。测试用例按顺序设置为优先级,这样可以确保构造正确的键。这很痛苦,因为如果我想按照这种模式添加一个新的测试用例。假设我想添加一个测试用例并为其分配优先级 21,那么我将不得不调整 21 之后的所有测试方法的优先级,包括第 21 个优先级测试用例。
短期: 我试图找到一种最简单的方法来单独运行一个测试。有一些肮脏的方法可以做到这一点。例如,我可以只注释掉其他测试用例并重新分配适当的计数值,但这太低效了。
长期: 从长远来看,我很想听听意见和建议以改善这一点。我自己对长期改进有一些想法,但是我希望从这里获得更多有见地的建议。
另外,如果有任何技巧可以解决添加测试用例而不需要重新组织优先级的问题,请告诉我(我有一个我已经实施的解决方案,我只使用一个更具描述性的唯一键实际测试用例)。
【问题讨论】:
标签: java testing automated-tests testng integration