java接口自动化测试框架-java接口自动化框架
一、需求背景
图片
在实际的接口测试中,有时候可能需要的参数很多,或者我们可能只想要一套完整的参数,包括必填项和非必填项,比如下面的json:
{
“店铺”: {
“书”: [
{
“类别”:“参考”java接口自动化测试框架,
“作者”:“奈杰尔·里斯”,
"title": "世纪名言",
“价格”:8.95
},
{
“类别”:“小说”,
“作者”:“伊夫林·沃”,
"title": "荣誉之剑",
“价格”:12.99
},
{
“类别”:“小说”,
“作者”:“赫尔曼梅尔维尔”,
“标题”:“白鲸记”,
“ISBN”:“0-553-21311-3”,
“价格”:8.99
},
{
“类别”:“小说”,
“作者”:“JRR托尔金”,
"title": "指环王",
"isbn": "0-395-19395-8",
“价格”:22.99
}
],
“自行车”: {
“红色”,
“价格”:19.95
}
},
“昂贵”:10
}
在方法中一一传入显然不现实; 写入hashmap的工作量和复杂度也非常大。 这时候就需要一个模板来预先定义好我们需要的参数和结构。 我们只需要修改对应的值就可以了,这就引出了今天的两个主角:
Json路径
胡子
2.JsonPath
图片
我们先来看第一个模板技术JsonPath。 注意这里的JsonPath指的是Jayway JsonPath。 Maven 依赖于以下内容:
com.jayway.jsonpath json 路径 2.4.0
2.1 元素定位
在UI自动化中,我们会用到xpath元素定位技术。 在这里我将其进行比较,以方便理解和记忆; Jayway JsonPath为我们提供了两种定位方式:.store.book[0].title, .store.book[0].title, .store.book[0].title, ['store']['book'][ 0]['标题']
这里我习惯使用第一种,推荐使用,类似于编程中的方法调用;
使用$从根元素开始查找,点击要查找的元素java接口自动化测试框架,逐层查找,直到到达需要查找的地方; 同一个元素可以按照方括号[]+index的方法区分,index也是从0开始;
算子,官方提供了以下算子
图片
实际演示
下面的实际演示分为以下三个步骤:
使用Jayway JsonPath的parse方法解析获取json文件内容
然后用set方法用Jayway JsonPath的语法修改解析结果
最后使用阿里的fastJson格式化输出并查看修改结果
1) $.store.book[*].author - 所有书籍的作者
将所有书籍的作者姓名更改为“测试作者”
@测试
void jsonPath() 抛出 IOException {
//jayway jsonpath
DocumentContext documentContext = JsonPath.parse(this.getClass().getResourceAsStream(“/book.json”));
documentContext.set("$.store.book[*].author", "测试作者");
字符串 jsonString = documentContext. jsonString();
//ali fastJson
JSONObject object = JSONObject.parseObject(jsonString);
String pretty = com.alibaba.fastjson.JSON.toJSONString(object, SerializerFeature.PrettyFormat,
SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat);
System.out.println(pretty);
}
运行结果:
图片
2)$.store.*——修改store下的所有物品,包括自行车和书。 将商店下的所有内容更改为全部更改
@测试
void jsonPath() 抛出 IOException {
//jayway jsonpath
DocumentContext documentContext = JsonPath.parse(this.getClass().getResourceAsStream(“/book.json”));
documentContext.set("$.store.*", "all changes");
字符串 jsonString = documentContext. jsonString();
//ali fastJson
JSONObject object = JSONObject.parseObject(jsonString);
String pretty = com.alibaba.fastjson.JSON.toJSONString(object, SerializerFeature.PrettyFormat,
SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat);
System.out.println(pretty);
}
运行结果:
图片
3) $...book[0,1] - book 下的第一和第二
将book下的第一、二内容改为first two change
@测试
void jsonPath() 抛出 IOException {
//jayway jsonpath
DocumentContext documentContext = JsonPath.parse(this.getClass().getResourceAsStream(“/book.json”));
documentContext.set("$...book[0,1]", "前两变");
字符串 jsonString = documentContext. jsonString();
//ali fastJson
JSONObject object = JSONObject.parseObject(jsonString);
String pretty = com.alibaba.fastjson.JSON.toJSONString(object, SerializerFeature.PrettyFormat,
SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat);
System.out.println(pretty);
}
运行结果:
图片
2.2 补充说明
上面给出了几个简单的例子。 日常工作中用的最多的就是修改模板中的一些字段,其余不经常变化的字段可以在模板文件中设置;
官网还提供了很多算术方法和逻辑符号。 有需要的可以到官网继续学习研究:
图片
图片
胡子
图片
上面介绍了JsonPath的模板技术,但是有一个缺点,就是JsonPath只能处理json格式的模板文件。 如果不是json,就不行。 这时候就需要一个通用的模板技术,就是Mustache。
Mustache,字面意思是大胡子,可能是因为它的模板符号是花括号,更像胡子,比如官网首页的图片: