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

news2024/11/20 13:39:39

这里写目录标题

  • 一、目标
  • 二、应用场景
  • 三、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 chevron

class 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.py

from L5.har_to_case.generate_case import GenerateCase


generate_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 {
    @Test
    void 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 {
    @Test
    void 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: GET
    validate_script:
        - "assert status_code == 200"

生成的测试文件

# httprunner 的用例模版
config:
    name: basic test with httpbin
teststeps:
-
    name: httprunner的模板
    request:
        url: https://httpbin.ceshiren.com/
        method: GET
    validate_script:
        - "assert status_code == 200"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/541129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库界的科技与狠活: 创邻科技Galaxybase X英特尔SGX数据加密解决方案正式发布

引言 近日,创邻科技入选与英特尔合作,在基于第四代英特尔至强处理器的支持下,利用软件防护扩展(Software Guard Extension,SGX) 技术,打造出了具备可信执行环境的图数据库产品,保护企业释放关联…

STM32单片机多功能电子秤点数秤食物热量卡路里称重

实践制作DIY- GC0132-多功能电子秤 一、功能说明: 基于STM32单片机设计-多功能电子秤 二、功能介绍: STM32F103C系列最小系统lcd1602HX7115Kg电子秤去皮键模式选择按键重量设置键上键下键 有3种模式普通模式、点数模式、卡路里模式。通过模式选…

Requests-get方法的使用

Requests-get方法使用 打开网页使用代码获取页面内容查看结果页面格式修改 爬取书名完整代码以及注释代码注释 翻页查询所有 以https://books.toscrape.com/网站为例: 打开网页 先把网页打开,然后右键检查,找到网络一栏,这个时候…

【Android】【Java】【每日练手1】字符串的二维码生成器

文章目录 一、需求二、创建android stdio工程三、设置好JDK四、创建activity五、编写activity_main.xml布局六、build.gradle增加zxing依赖七、MainActivity 一、需求 一个界面,界面上一个文本输入框、一个按钮、一个二维码显示view。可在文本输入框输入字符串&…

为什么分布函数的概率分布为均匀分布?

为什么分布函数的概率分布为均匀分布? 我先来解决这样一个常见的问题:已知随机变量X的概率分布,求Yg(X)的概率分布(分布律或者概率密度函数) 这种问题有三种类型(如下图) 我们以随机变量X为连续…

计算机技术是最容易引发第四次工业革命的方向吗? - 易智编译EaseEditing

计算机技术是当前推动第四次工业革命的关键方向之一,但并非是唯一的方向。 第四次工业革命是在信息技术、人工智能、物联网、生物技术等多个领域的交叉融合下发生的一次全球性变革。 计算机技术在其中发挥了重要的作用,但还需要与其他技术领域相互配合和…

【C++】C/C++内存管理,从底层汇编带你理解new和delete!

c内存管理 C/C内存分布C语言中动态内存管理的方式C动态内存管理new/delete操作内置类型new和delete操作自定义类型 operator new与operator delete函数new和delete的实现原理内置类型自定义类型 定位new表达式(placement-new)常见面试题malloc/free和new/delete的区别 &#x1…

【详解LinkedList与链表】

🌠作者:TheMythWS. 🎆专栏:《集合与数据结构》 🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 目录 链表 概念 图解链表 链表的实现 1.创建链表 2.遍历链…

CST-FSS/周期谐振单元的仿真

引言 这几天要仿真超表面,上下求索CST有关相关内容的教程,视频倒是有不少,不过发现很多人忽略了官方帮助文档。本文以官方帮助文档为基础,写一个有关使用CST实现FSS/超表面这类周期结构的笔记。 官方帮助文档 CST有关FSS的内容使用了一个金属谐振圆环作为例子,这是由于…

pod的基本介绍| harbor仓库的搭建 tomcat镜像拉取

pod的基本介绍| harbor仓库的搭建 tomcat镜像拉取 一 Pod基础概念:二 通常把Pod分为两类:三 Pod容器的分类:四 应用容器(Maincontainer)五 镜像拉取策略(image PullPolicy)六 部署 harbor 创建私…

无序列表标签<ul>和<li>

HTML5中提供了3种列表。 无序列表 无序列表是没有刻意顺序的列表。 比如我们如果想去超市买东西,想买的东西又比较多,为了避免忘记漏买某些东西,就会列一个购物清单,购物清单就是一个无序列表,因为要买的东西只要没有…

如何为博客选择目标受众(+例子)

要创建免费网站和博客?从易服客建站平台开始 500M免费空间,可升级为20GB电子商务网站 创建免费网站 您是否正在寻找为您的博客选择目标受众的最佳实践? 选择目标受众可以让您创建更好的内容,引起用户的共鸣。这有助于您获得更…

[学习笔记]解决因C#8.0的语言特性导致EFCore实体类型映射的错误

今天下午在排查一个EF问题时,遇到了个很隐蔽的坑,特此记录。 问题 使用ef执行Insert对象到某表时报错,此对象的Address为空: 不能将值 NULL 插入列 Address,表 dbo.xxx;列不允许有 Null 值。INSERT 失败。…

基于云服务器的博客和靶场搭建-经验教训

搭这两个东西还是走了很多弯路 我就不给你们讲方法过程了,直接参考我给的链接,我主要说经验教训 博客搭建参考:https://zhuanlan.zhihu.com/p/37896471 靶场搭建参考:https://zhuanlan.zhihu.com/p/86409304 https://www.free…

LAMP搭建Discuz

文章目录 一、关闭防火墙二、安装apache三、安装Mysql四、安装PHP五、安装Discuz 一、关闭防火墙 [rootlocalhost ~]# systemctl status firewalld.service还要关闭selinux,要不然后面web页安装Discuz时会过不去。 [rootlocalhost ~]# setenforce 0编辑 /etc/seli…

堆排序——我欲修仙(功法篇)

个人主页:【😊个人主页】 系列专栏:【❤️我欲修仙】 学习名言:学习和研究好比爬梯子,要一步一步地往上爬,企图一脚跨上四五步,平地登天,那就必须会摔跤了。——华罗庚 系列文章目录…

国产游戏引擎,竟然用来搞民航

​本文源自量子位 | 公众号 QbitAI 只是给飞行员做个“装备”,竟然突破了国内民用航空领域的一大技术难题?! 这是一群游戏技术开发者的真实经历。 他们用自研游戏引擎开发了一个飞行模拟软件,能够第一视角模拟飞行员起飞、着陆…

Html中使用jquery通过Ajax请求WebService接口以及跨域问题解决

场景 VS2019新建WebService/Web服务/asmx并通过IIS实现发布和调用: VS2019新建WebService/Web服务/asmx并通过IIS实现发布和调用_霸道流氓气质的博客-CSDN博客 在上面实现发布WebService的基础上,怎样在html中通过jquery对接口发起 请求和解析数据。…

【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

领域驱动设计DDD架构解析和绘图模板分享

DDD整洁架构 DDD整洁架构为了解决强调用的关系,出现了洋葱架构(六边形)架构,就是为了实现依赖倒置 它的思想就是把领域模型放到核心的位置,领域模型是独立的,不会直接强依赖其他层,而通过适配…