当前位置: 主页 > JAVA语言

java接口自动化测试框架-java接口自动化框架

发布时间:2023-02-09 16:26   浏览次数:次   作者:佚名

一、需求背景

图片

在实际的接口测试中,有时候可能需要的参数很多,或者我们可能只想要一套完整的参数,包括必填项和非必填项,比如下面的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,字面意思是大胡子,可能是因为它的模板符号是花括号,更像胡子,比如官网首页的图片: