本文主要是介绍接口自动化——har 生成用例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里写目录标题
- 一、目标
- 二、应用场景
- 三、Har 简介
- 四、实现思路
- 五、模板技术
- 六、模版技术-环境安装(Python)
- 七、har 生成用例实现思路
- 1、python模板
- 模板文件
- 生成的测试文件
- 2、java模板
- 模板文件
- 生成的测试文件
- 3、httprunner模板
- 模板文件
- 生成的测试文件
一、目标
掌握 Har 转换成脚本的能力。
二、应用场景
通过 Har 格式的接口数据,转换为接口自动化测试脚本:
提升脚本的编写效率
降低脚本的出BUG的几率
三、Har 简介
Har格式是指HTTP归档格式(HTTP Archive Format)。
用于记录HTTP会话信息的文件格式。
多个浏览器都可以生成 Har 格式的数据。
四、实现思路
五、模板技术
Mustache是一种轻量级的模板语言。
需要定义模板,然后可以将数据填充到设定好的位置。
官网地址:https://mustache.github.io/
模版
Hello {{name}}!
填充name的位置
Hello KOBE!
六、模版技术-环境安装(Python)
环境安装
pip install chevron
七、har 生成用例实现思路
读取Har数据。
提前准备测试用例模版。
将读取的Har数据写入到模板中。
代码实现如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/5/10 11:15
# @Author : 杜兰特
# @File : generate_case.py
import json
import chevronclass GenerateCase:def load_har(self,har_file):"""从har格式的文件中提取想要的数据信息:return:"""with open(har_file) as f:har_file_data=json.load(f)#print(har_file_data)print(har_file_data["log"]["entries"][0]["request"])return har_file_data["log"]["entries"][0]["request"]def generate_case_by_har(self,orgin_template,testcase_filename,har_file):"""生成对应的测试用例1、读取原本的模板文件2、替换模板文件中的数据信息3、生成新的测试用例文件:return:"""har_data=self.load_har(har_file)with open(orgin_template,encoding="utf-8") as f:res=chevron.render(f.read(),har_data)with open(testcase_filename,"w",encoding="utf-8") as f:f.write(res)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/5/10 11:18
# @Author : 杜兰特
# @File : test_generate_case.pyfrom L5.har_to_case.generate_case import GenerateCasegenerate_case=GenerateCase()def test_load_har():generate_case.load_har("./template/httpbin.ceshiren.com.har")def test_generate_case_by_har():generate_case.generate_case_by_har("./template/python_template","test_req.py","./template/httpbin.ceshiren.com.har")def test_generate_httprunner_case_by_har():generate_case.generate_case_by_har("./template/httprunner_template","test_req.yaml","./template/httpbin.ceshiren.com.har")def test_generate_java_case_by_har():generate_case.generate_case_by_har("./template/java_template","test_req.java","./template/httpbin.ceshiren.com.har")
1、python模板
模板文件
# python 接口测试用例
import requests
def test_request():r = requests.get(url="{{url}}",method="{{method}}",headers="{{headers}}")
生成的测试文件
# python 接口测试用例
import requests
def test_request():r = requests.get(url="https://httpbin.ceshiren.com/",method="GET",headers="[{'name': ':authority', 'value': 'httpbin.ceshiren.com'}, {'name': ':method', 'value': 'GET'}, {'name': ':path', 'value': '/'}, {'name': ':scheme', 'value': 'https'}, {'name': 'accept', 'value': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7'}, {'name': 'accept-encoding', 'value': 'gzip, deflate, br'}, {'name': 'accept-language', 'value': 'zh-CN,zh;q=0.9'}, {'name': 'cache-control', 'value': 'max-age=0'}, {'name': 'cookie', 'value': '_ga=GA1.2.176134381.1632832298; sensorsdata2015jssdkcross=%7B%22%24device_id%22%3A%22186920d31dd1499-00e17cfac93039-26031951-1821369-186920d31de12dd%22%7D; Hm_lvt_214f62eef822bde113f63fedcab70931=1681872517,1682320279,1683459070; Hm_lpvt_214f62eef822bde113f63fedcab70931=1683459388'}, {'name': 'sec-ch-ua', 'value': '"Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"'}, {'name': 'sec-ch-ua-mobile', 'value': '?0'}, {'name': 'sec-ch-ua-platform', 'value': '"Windows"'}, {'name': 'sec-fetch-dest', 'value': 'document'}, {'name': 'sec-fetch-mode', 'value': 'navigate'}, {'name': 'sec-fetch-site', 'value': 'none'}, {'name': 'sec-fetch-user', 'value': '?1'}, {'name': 'upgrade-insecure-requests', 'value': '1'}, {'name': 'user-agent', 'value': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}]")
2、java模板
模板文件
// java 接口测试用例
package com.ceshiren.har;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
public class HttpbinTest {@Testvoid httpbinReq() {given()// 可以设置测试预设.when()// 发起 GET 请求.get("{{url}}").then()// 解析结果.log().all() // 打印完整响应信息.statusCode(200); // 响应断言}
}
生成的测试文件
// java 接口测试用例
package com.ceshiren.har;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
public class HttpbinTest {@Testvoid httpbinReq() {given()// 可以设置测试预设.when()// 发起 GET 请求.get("https://httpbin.ceshiren.com/").then()// 解析结果.log().all() // 打印完整响应信息.statusCode(200); // 响应断言}
}
3、httprunner模板
模板文件
# httprunner 的用例模版
config:name: basic test with httpbin
teststeps:
-name: httprunner的模板request:url: {{url}}method: GETvalidate_script:- "assert status_code == 200"
生成的测试文件
# httprunner 的用例模版
config:name: basic test with httpbin
teststeps:
-name: httprunner的模板request:url: https://httpbin.ceshiren.com/method: GETvalidate_script:- "assert status_code == 200"
这篇关于接口自动化——har 生成用例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!