接口自动化——har 生成用例

2023-11-10 06:50

本文主要是介绍接口自动化——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 生成用例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/381037

相关文章

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos