文章目录
- [1. har文件](#1. har文件)
- [2. har格式 转 接口测试用例](#2. har格式 转 接口测试用例)
- [3. har 转 接口测试用例实战](#3. har 转 接口测试用例实战)
-
- [3.1 定义接口模版文件在Resources文件中](#3.1 定义接口模版文件在Resources文件中)
- [3.2 读取接口返回数据-读取har文件中的需要的数据](#3.2 读取接口返回数据-读取har文件中的需要的数据)
- [3.3 将读取的Har数据写入到模板中](#3.3 将读取的Har数据写入到模板中)
- [3.4 生成测试用例](#3.4 生成测试用例)
- 总结
✨✨✨学习的道路很枯燥,希望我们能并肩走下来!
编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。

本文开始
1. har文件
-
har介绍 :Har格式是指HTTP归档格式(HTTP Archive Format),用于记录HTTP会话信息的文件格式,多个浏览器都可以生成 Har 格式的数据。-f12右键接口→即可复制
-
har使用场景:将 Har 格式的接口数据,转换为接口自动化测试脚本。
-
优点:提升脚本的编写效率,降低脚本的出BUG的几率
2. har格式 转 接口测试用例
2.1 har格式 转 接口测试用例 思路
- 读取Har格式中的接口数据
- 提前准备接口测试用例模版,如:REST-assure(java), request(python),httprunner等
模版使用方式:将参数使用{{}}双花括号即可; - 将读取的Har数据写入模版中对应参数位置,生成相应接口测试用例;
模版技术
Mustache是一种轻量级的模板语言。
使用方式:先定义模板,然后将数据填充到设定好的位置。-使用{{}}双花括号
官网地址:https://mustache.github.io/
文件读写
java
//创建Mustache模板引擎的默认工厂实例
DefaultMustacheFactory mustacheFactory = new DefaultMustacheFactory();
//加载并编译指定的模板文件
Mustache mustache = mustacheFactory.compile("规定的模版");
//创建文件输出流-将数据写入到文件中-也就是生成的接口测试用例
File outFile = new File(testCaseFileName);
PrintWriter printWriter = new PrintWriter("输出的文件-outFile");
//将模板中的参数进行替换,并输出文件
mustache.execute(printWriter,"模版中需要替换参数数据").flush();
printWriter.close();
2.2 java使用方式 - 添加依赖
xml
<!-- 模版相关库 -->
<dependency>
<groupId>com.github.spullara.mustache.java</groupId>
<artifactId>compiler</artifactId>
<version>0.9.10</version>
</dependency>
3. har 转 接口测试用例实战
3.1 定义接口模版文件在Resources文件中
- 首先定义一个模板,在Resources文件夹下新建一个xxx.template模板文件,并定义文件内容
Java-Junit5-接口测试用例模版
java
package com.xxx.har;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
public class HttpbinTest {
@Test
void httpbinReq() {
given()
// 可以设置测试预设
.when()
// 发起 GET 请求
.get("{{url}}")
.then()
//解析结果
.log().all() // 打印完整响应信息
.statusCode(200); // 响应断言
}
}
httpRunner模版 - yaml文件
yaml
# httprunner 的用例模版
config:
name: basic test with httpbin
teststeps:
-
name: httprunner的模板
request:
url: {{url}}
method: GET
validate_script:
- "assert status_code == 200"
python - pytest模版
python
import requests
def test_request():
r = requests.get(url="{{url}}")
3.2 读取接口返回数据-读取har文件中的需要的数据
- 获取har文件:浏览器打开开发者模式,请求接口栏点击右键,选择复制 - 选择复制数据为Har格式。
- 将复制的数据存放到resources文件夹下
3.3 将读取的Har数据写入到模板中
【注】想替换的参数,在模版中都使用{{}}双花括号即可,同时也需要读取Har文件中的相应参数;这里使用Map存储,也就是需要将接口请求类型存储起来
java
import com.alibaba.fastjson.JSONPath;
import com.github.mustachejava.DefaultMustacheFactory;
import com.github.mustachejava.Mustache;
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class GenerateCase {
// 从Har文件中读取数据。
public Map<String, String> loadHar(String filePath){
Map<String,String> reqData = new HashMap<>();
try {
DocumentContext context = JsonPath.parse(new File(filePath));
//读取需要的参数数据-使用jsonpath
ArrayList<String> harUrl = context.read("$..request.url");
//读取第一个url
reqData.put("url",harUrl.get(0));
} catch (IOException e) {
e.printStackTrace();
}
return reqData;
}
// 根据模板生成测试用例
// originTemplate - 模版文件地址
// testCaseFileName-需生成的测试用例文件名称
// harFileName-har文件地址
public void writeCaseByTemplate(String originTemplate,String testCaseFileName, String harFileName) throws IOException {
Map<String,String> reqData = loadHar(harFileName);
//读取模板文件中的内容
DefaultMustacheFactory mustacheFactory = new DefaultMustacheFactory();
Mustache mustache = mustacheFactory.compile(originTemplate);
// 定义一个文件,写入数据
File outFile = new File(testCaseFileName);
try {
//将数据写入到模版文件中
PrintWriter printWriter = new PrintWriter(outFile);
//将模板中的参数进行替换
mustache.execute(printWriter,reqData).flush();
printWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
3.4 生成测试用例
3.3写了读取har文件的方法 和 读取har文件数据写入模版的方法,现在直接在测试用例中使用方法,生成测试用例
java
import org.junit.jupiter.api.Test;
import java.io.IOException;
import static org.junit.jupiter.api.Assertions.*;
class GenerateCaseTest {
@Test
void loadHar() {
GenerateCase generateCase = new GenerateCase();
System.out.println(generateCase.loadHar("src/main/resources/httpbin.org.har"));
}
@Test
void writeCaseByTemplate() throws IOException {
GenerateCase generateCase = new GenerateCase();
generateCase.writeCaseByTemplate("src/main/resources/junit.template",
"src/test/java/har/httpbinTest.java",
"src/main/resources/httpbin.org.har");
}
//httpRunner生成的用例文件名称是以yaml结尾的
@Test
void writeCaseByTemplateHttpRunner() throws IOException {
GenerateCase generateCase = new GenerateCase();
generateCase.writeCaseByTemplate("src/main/resources/httpRunner.template",
"src/test/java/har/test_httpbin.yaml",
"src/main/resources/httpbin.ceshiren.com.har");
}
//pytest生成的用例文件名称是以py结尾的
@Test
void writeCaseByTemplateHttpPyTest() throws IOException {
GenerateCase generateCase = new GenerateCase();
generateCase.writeCaseByTemplate("src/main/resources/pytest.template",
"src/test/java/har/test_httpbin.py",
"src/main/resources/httpbin.org.har");
}
}
总结
✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!
