# HttpRunnerFrame **Repository Path**: huanannan/HttpRunnerFrame ## Basic Information - **Project Name**: HttpRunnerFrame - **Description**: httprunner框架实例 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-08-16 - **Last Updated**: 2021-10-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HttpRunnerFrame     此项目是我第一次接触httprunner框架,主要用以学习自动化框架简单的搭建,初识分层模式、热加载以及数据驱动。 ### 一、Httprunner * 面向http协议的通用测试框架 * 只需要维护yml/json/py文件就能实现自动化测试,性能测试(本文不涉及),线上监控以及持续集成 ### 二、 设计理念 * 充分利用开源项目,降低框架的开发成本以及学习成本 * 遵循约定大于临时配置的准则 * 通过配置文件组织测试用例 ### 三、 环境以及安装 * 需要安装python * 安装httprunner插件 * pip install httprunner * 通过 hrun -V 验证 * 安装allure * [官网下载allure:https://github.com/allure-framework/allure2/releases](https://github.com/allure-framework/allure2/releases) * 下载后解压到非中文目录 * 把bin路径配置到系统变量path中: E:\allure-2.13.7\bin * 安装allure报告:pip install alluer-pytest * 验证:allure --version ### 四、 框架接口说明 **httprunner startproject 项目名 ,使用该命令创建基础架构** * api —— 测试接口层,用于存放yaml文件 【接口定义层】 * data —— 数据驱动,主要存放csv数据文件 * har —— 存放抓包工具导出的har文件 * reports —— 存放html或者allure测试报告 * testcase —— 存放测试用例 【测试用例层】 * testsuites —— 存放测试套件 【测试套件层】 * .env —— 存放环境变量,在api接口定义层里面使用:${ENV(变量名)}获取环境变 * all.py —— 执行文件,定义执行范围以及测试报告 * debugtalk.py —— 实现热加载的py文件,可以写随机数等方法,在yml文件中通过${方法名}调用 注意:
   1. testcases调用api层(使用api关键字),testsuites调用testcases层。(使用testcase关键字)
   2. 一个接口对应一个yaml文件,一个yaml文件对应一个csv文件
   3. 每个yaml文件执行都会自动生成pytest文件
### 五、YAML文件结构说明 ```yaml config: # 配置 name: 获取标签接口 # 用例名称 variables: # 全局变量 access_token: $access_token # 多个变量回车往下增加 verify: false # 是否开启https验证 base_url: ${ENV(huanjing)} # 环境变量 teststeps: # 步骤 - name: 获取标签 # 步骤名称 request: # 请求 headers: # 请求头 Accept: '*/*' Accept-Encoding: gzip, deflate, br Cache-Control: no-cache Connection: keep-alive Host: api.weixin.qq.com Postman-Token: 93ebbeef-823a-49d2-b4a3-66dbb5d6dd81 User-Agent: PostmanRuntime/7.28.0 method: GET # 请求方式 params: # 参数 也可以是data/json access_token: $access_token # 参数 url: /cgi-bin/tags/get # 请求地址 extract: # json提取器 通过body或者content提取 access_token: body.access_token # 提取响应中的access_token的值放到access_token中 validate: # 断言 - eq: # 相等 - status_code # 需要判断的参数 - 200 # 值 - equals: # 相等 - headers.Content-Type - application/json; encoding=utf-8 - str_eq: # 相等(str(a)==str(b)) - body.access_token - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 字符串 - contains: # 包含 只能判断一级目录的key,嵌套和和值都无法判断 - body - access_token ``` ### 六、接口关联 * 在接口定义层 使用extract关键字提取 ```yaml extract: access_token: body.access_token ``` * 其他接口调用需要在全局变量中获取后,再使用 ```yaml variables: # 全局变量 access_token: $access_token # 多个变量回车往下增加 ``` ```yaml params: access_token: $access_token ``` ### 七、 动态参数 * 通过debugtalk.py的热加载的方式实现 * 第一步:创建一个debugtalk.py文件,然后再里面写一个函数。 * 第二步:在yaml文件中通过${函数名()}的方式调用。 ```python # 获取一个指定范围的随机数 def get_random_number(min, max): return random.randint(min, max) ``` ```yaml variables: access_token: $access_token name: 李明${get_random_number(1000, 10000)} ``` ### 八、数据驱动 * **使用parameters定义数据源。应用于测试用例层** * 直接在脚本里面指定参数列表,最简单。适合于参数比较少的情况 ```yaml config: name: 测试用例 parameters: appid‐grant_type‐secret‐assert_str: ‐ ["wx74a8627810cfa308","client_credential","e40a02f9d79a8097df497e6aaf93ab80","access_token"] ‐ ["","client_credential","e40a02f9d79a8097df497e6aaf93ab80","errcode"] ‐ ["wx74a8627810cfa308","","e40a02f9d79a8097df497e6aaf93ab80","errmsg"] teststeps: ‐ name: 获得token鉴权码API api: api/get_token.yml ``` * 使用CSV文件,适合于参数比较大的情况 * csv文件中第一行必须放参数名称,并且参数名称必须和测试用例里面的名称一致 * csv文件中第二行放数据,每一组数据占一行 * 在测试用例层【参数名称-参数名称:】的样式,再通过${P(csv文件路径+名称)}调用数据, ```yaml config: name: 测试用例 parameters: appid‐grant_type‐secret‐assert_str: ${P(data/get_token_data.csv)} teststeps: ‐ name: 获得token鉴权码API api: api/get_token.yml ``` ```csv appid,grant_type,secret,assert_str "wx74a8627810cfa308","client_credential","e40a02f9d79a8097df497e6aaf93ab80","access_token" "","client_credential","e40a02f9d79a8097df497e6aaf93ab80","errcode" "wx74a8627810cfa308","","e40a02f9d79a8097df497e6aaf93ab80","errmsg" ``` * 使用函数生成数据,适用于数据变化大的情况 ### 九、文件上传 * 前提: 需要安装两个包 ```python pip install requests_toolbelt filetype pip install "httprunner[upload]" ``` ### 十、生成测试报告 **执行测试用例统一在all.py文件中运行** * html报告 ```python # 运行文件夹中所有的测试用例并输出 html格式报告 os.system("hrun testcase --html=reports/report.html") ``` * allure报告 1. 在reports目录下生成temps目录,并且在temps目录下生产临时的json格式的临时报告 ```python # ‐‐clean‐alluredir 命令用于每次执行都先清空json格式的临时文件 os.system("hrun testsuites/test_suites.yml ‐‐alluredir=reports/temps ‐‐clean‐alluredir") ``` 2. 根据临时json报告生成allure报告 ```python # ‐clean 删除之前的allure报告,保证执行过后的报告为正确的 os.system("allure generate reports/temps ‐o reports/allures ‐‐clean") ```