关于软件测试:软件测试Junit5-YAML-轻松实现参数化和数据驱动一

83次阅读

共计 4783 个字符,预计需要花费 12 分钟才能阅读完成。

​ 

​编辑

登录:不同的用户名,不同的明码,不同的组合都须要做登录场景的测试,失常的排列组合下可能会产生多个用例

搜寻:不同的搜寻条件产生不同的搜寻后果,搜寻也是常见的测试项,单个搜寻参数或者多种搜寻参数的组合;同样也会产生多个用例。

参数化:咱们在写自动化用例的时候会有很多办法,个别咱们都会把数据通过参数来传递给办法,而不会间接在办法中写“死”,所以办法之间的数据传递都是通过参数化来进行,利用参数化进行数据与变量的对应;比方咱们的登录账号密码设置在参数中,再将参数传递到办法中。

public MainPage login(String username, String password) {sendKeys(inputUsername,username); sendKeys(inputPassword,password); click(loginBtn); return new MainPage();}

数据驱动:将参数化中的数据起源变成从内部读取,参数有一个存放数据的中央,在用例执行的时候去去数据;这个数据存储的中央能够是咱们定义的数组、hashmap,也能够是从内部文件中 (excel、csv、xml、yaml 等) 读取。

例如上述的搜寻案例,咱们能够将搜寻条件放入内部文件中,每次执行搜寻用例时,去文件中获取数据,依据获取到的数据执行不同的搜寻测试即可。

    • 洗衣液 – – 帽子 – – 手套

总结下来:

在执行测试工作过程中,有很多过程是须要动态变化的,如果每一次的变动都须要编码部署,那么整个执行的流程就会边长;

对于业务测试工程师来说,保护自动化代码有肯定的门槛,须要相熟编程语言和测试框架的构造;

定义好了数据驱动,将变动的数据放入配置文件中进行保护,既便捷(无需找到对应代码批改部署),也升高了保护的门槛(业务测试只须要在配置文件中批改数据即可)

与测试数据的数据驱动大致相同,次要也是不便业务测试保护,升高保护门槛和代码批改部署出错的危险;批改配置文件,整个业务行为和形象是不必扭转的,当然,在 UI 自动化中配合 PO 一起应用会“风味更佳”。

手工录制测试步骤,间接生成代码比拟艰难,能够生成步骤的配置文件,让代码去读配置文件,实现自动化的回放;(此方面自己临时仅理解过,还未实际落地,实践上是能够实现的。)

不要在测试用例内实现大量的数据驱动:
用例通过 PO 的调用是可能十分清晰展现出业务执行场景的,业务才是用例的外围;一旦在用例里应用了大量数据驱动,如调用各种 yaml、csv 等数据文件,会造成用例可读性变差,保护复杂度变高;

测试数据的数据驱动
测试步骤的数据驱动



定位符
行为流



断言的数据驱动



不同数据格式文件的比照


​编辑 1080×331 48.6 KB

从上述比照后果中,Json 和 YAML 对于数据结构的反对和书写水平是较好的;然而,YAML 的写法更简洁,并且还能够正文,因而最举荐应用的就是 (从表格中的所处都地位也可猜到~)…位于 C 位的 YAML!
那么到底什么是 YAML,又如何应用,上面简略来理解一下

yaml 的语法

大小写敏感
应用缩进示意层级关系
缩进时不容许应用 Tab 键,只容许应用空格。缩进的空格数目不重要,只有雷同层级的元素左侧对齐即可

示意正文



yaml 反对的三种数据结构

纯量(scalars):单个的、不可再分的值,例如数字、字符串、布尔值等
对象:键值对的汇合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)

键值对模式 key: value #行内对象 person: {name: allen, age: 25} #以 - 结尾示意为一个数组里的值 – A – B – C #数组内嵌套子数组,用一个空格缩进示意 – – a – aa – – b – bb

对象和数组能够联合应用,造成复合构造

languages: – Ruby – Perl – Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org

把一个文件数据通过类型建设关联,并创立出一个类的实例,反之也能够把一个对象写入文件中。
先来看 jackson-databind 对 json 文件的操作
增加 maven 依赖

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.9.3</version> </dependency>

写 json 文件


1)先创立一个类,蕴含变量 name,age

public class TestFileSource {public String name; public int age;}

2)创立单元测试,创立 ObjectMapper 对象,调用 writeValue 对 json 文件进行写操作

@Test void writeJson() throws IOException { ObjectMapper mapper = new ObjectMapper(); TestFileSource testFileSource = new TestFileSource(); mapper.writeValue(new File(“..\demo.json”),testFileSource); }

3)失去 demo.json 文件的后果, 从后果能够看到 TestFileSource 类中的变量曾经被写入的 json 文件中

{“name”:null,”age”:0}

读 json 文件

1)创立单元测试,创立 ObjectMapper 对象,调用 readValue 办法对 json 文件进行数据读取

@Test void readJson() throws IOException { ObjectMapper mapper = new ObjectMapper(); TestFileSource testFileSource = mapper.readValue(TestFileSource.class.getResourceAsStream(“/demo.json”), TestFileSource.class); System.out.println(testFileSource); System.out.println(testFileSource.age); }

2)读取后果

ApiDemos.testcase.TestFileSource@4562e04d 0

输入丑陋的 json 格局
1)创立单元测试,创立 ObjectMapper 对象,调用 writerWithDefaultPrettyPrinter().writeValueAsString 办法可对指定对象进行 json 数据格式的输入

@Test void prettyPrintJson() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); // pretty print String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new TestFileSource()); System.out.println(json); }

2)打印后果

{“name” : null, “age” : 0}

参考链接
jackson-databind GitHub 地址:
https://github.com/FasterXML/…

再来看 jackson-dataformats-text,这是一个能够对 YAML、CSV、Properties 和 XML 文件进行操作的库,也是目前最罕用的,不过这里咱们只重点关注其对 YAML 文件的操作

增加 maven 依赖

<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.9.8</version> </dependency>

读 YAML 文件
想要读取 YAML 文件,最次要的是在 new ObjectMapper 对象的时候退出 new YAMLFactory(),这样就胜利切换至 yaml 操作的状态,而后利用 readValue 办法就能够实现对 yaml 文件的数据读取了
1)创立 YAML 文件

name: allen age: 11

2)创立 ObjectMapper 对象,设置 new YAMLFactory()

@Test void readYaml() throws IOException { ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); TestFileSource testFileSource = mapper.readValue(TestFileSource.class.getResourceAsStream(“/demo2.yaml”), TestFileSource.class); System.out.println(testFileSource); System.out.println(testFileSource.age); }

打印后果

ApiDemos.testcase.TestFileSource@ba2f4ec 11

在 readValue 的办法中能够看到,第一个参数填的是文件地址,第二个参数就是精华所在!咱们能够给定一个对象类型,或者一个二维数组等,用来产生映射关系,将文件数据和咱们的对象绑定,不便数据的读取。
如上述例子中咱们通过 TestFileSource 的实例化对象来调用 age 变量。

输入丑陋的 YAML 格局
与 json 输入的形式基本一致,只须要在 new ObjectMapper 对象的时候退出 new YAMLFactory()即可
1)创立类和类的成员变量, 蕴含纯量、数组和哈希

public class TestFileSource {public String name = “tester”; public int age = 2; public Object[][] arr= {{1,2,3,},{“a”,”b”,”c”}}; public HashMap<String,Object> map = new HashMap<String, Object>(){ { put(“name”,”tester”); put(“sex”,” 男 ”); } }; }

2)创立单元测试,创立 ObjectMapper 对象,退出 new YAMLFactory() 参数,调用 writerWithDefaultPrettyPrinter().writeValueAsString 办法可对指定对象进行 yaml 数据格式的输入

@Test void prettyPrintYaml() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); // pretty print String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new TestFileSource()); System.out.println(json); }

3)打印后果

— name: “tester” age: 2 arr: – – 1 – 2 – 3 – – “a” – “b” – “c” map: sex: “ 男 ” name: “tester”

参考链接 jackson-dataformats-text GitHub 地址:
https://github.com/FasterXML/…

同样是做自动化测试,在测试高手和一般小白的世界里,齐全是不一样的风光。

正文完
 0