har文件转为接口自动化测试用例

文章目录

  • [1. har文件](#1. har文件)
  • [2. har格式 转 接口测试用例](#2. har格式 转 接口测试用例)
    • [2.1 har格式 转 接口测试用例 思路](#2.1 har格式 转 接口测试用例 思路)
    • 文件读写
    • [2.2 java使用方式 - 添加依赖](#2.2 java使用方式 - 添加依赖)
  • [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文件

  1. har介绍 :Har格式是指HTTP归档格式(HTTP Archive Format),用于记录HTTP会话信息的文件格式,多个浏览器都可以生成 Har 格式的数据。-f12右键接口→即可复制

  2. har使用场景:将 Har 格式的接口数据,转换为接口自动化测试脚本。

  3. 优点:提升脚本的编写效率,降低脚本的出BUG的几率

2. har格式 转 接口测试用例

2.1 har格式 转 接口测试用例 思路

  1. 读取Har格式中的接口数据
  2. 提前准备接口测试用例模版,如:REST-assure(java), request(python),httprunner等
    模版使用方式:将参数使用{{}}双花括号即可;
  3. 将读取的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文件中

  1. 首先定义一个模板,在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文件中的需要的数据

  1. 获取har文件:浏览器打开开发者模式,请求接口栏点击右键,选择复制 - 选择复制数据为Har格式。
  2. 将复制的数据存放到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");
    }
}

总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
志栋智能1 小时前
自动化运维还有这样一种模式。
运维·人工智能·安全·机器人·自动化
!沧海@一粟!2 小时前
zabbix监控模板
linux·运维
Wpa.wk2 小时前
ubuntu22桌面版安装
经验分享·测试工具
巾帼前端2 小时前
全自动化知识库整理第一步
运维·自动化
麻瓜呀3 小时前
vue2 Element-ui框架相关常见问题-表单组件重置显示异常
运维·服务器·ui
wanhengidc3 小时前
算力服务器的作用都有哪些?
运维·服务器·深度学习
TG_yunshuguoji3 小时前
亚马逊云代理商:如何监控AWS RDS使用率并设置报警?
运维·云计算·aws
benjiangliu3 小时前
LINUX系统-12-进程控制(三)-自定义shell
linux·运维·服务器
lzhailb3 小时前
nginx
运维·nginx