现状: 我们的软件(用Java编写的后端)具有生成XML文件的功能,该文件包含存储在系统中的数据。为了描绘更好的图片,该文件会返回员工数据,例如他们的个人详细信息,资格,医疗条件和工作可用性。
但是,没有标准的文件结构可以返回所有内容。返回的内容取决于公司类型,一年中的时间以及针对一名员工存储的某些数据。例如,如果公司是私人有限公司,则不返回医疗条件,仅在冬季返回资格,工作数据的可用性仅在工作人员具有特定年龄等时才返回。这使得测试具有挑战性,因为有许多方案需要测试以确保XML文件在不同情况下是正确的。
对XML结构的更改是由使用这些文件的第三方软件驱动的,而这些似乎每年都会发生在每个季度。目前,测试根本不是自动化的,我们发现自己正在进行大量的手动测试。每当我们发生变化时:
目的: 理想情况下,我们希望能够自动化大多数(或至少一些)测试,XML的结构经常变化并且测试它是耗时的。
虽然第三方提供了XSD,但由于导出的性质和XSD的限制,使用它来验证XML结构很困难。数据导出因返回的某些数据而异,XSD没有办法说“如果这样......返回此数据......否则不返回”。
单个测试单个导出方法正在进行中,并且是长期目标的一部分。为了正确编写单元测试,我们必须重构(很多)代码,这是我们目前正在努力的时间。但是,我们正在尝试这项任何新的开发。
我们希望短期内做一些改进。我正在考虑编写一些数据库脚本来输入我需要的不同公司类型的数据,这些数据将在一个单独的测试模式中创建,每次都清除以前的数据。原因是,脚本将包含日期变量,因此每年我运行这些测试时,我将始终获得一个具有出生日期的工作人员,这将触发数据导出。创建导出后,将其与第三方文档提供的示例文件结构进行比较。当然,必须始终进行手动测试以进行新的更改。
这种方法听起来合理吗?这样做还有其他选择吗?
答案 0 :(得分:1)
我认为你的方法很好!我可以建议你使用工具自动执行仅使用java描述的一些步骤:
- 通过UI生成测试数据
您可以使用dbunit之类的工具来提取使用UI创建的方案。您可以清除数据库并使用java插入数据!
- 生成XML文件
- 检查XML文件的结构是否正确
- 检查XML文件中返回的数据是否正确
- 针对每种公司类型的不同方案重复上述内容
我认为所有这些步骤也可以在Junit中完成。
在Junit,可能是这样的:
class XmlSpecification {
@Before
void setup() {
// You have to implement for your specific database
this.clearDatabase()
}
@Test
void forCompanyABCTheXmlShouldBeLikeThis() {
// This method would use some dbunit api to insert data to the
// db
this.loadScenarioFor("company_abc_data.xml")
// Then you get the xml, validate the format and the data and etc...
}
}