httprunner环境变量

前言
我的上一篇文章讲了httprunner的基本介绍,这篇文章呢主要来给大家介绍httprunner中的环境变量。

一般来说,在进行实际应用的开发过程中,应用会拥有不同的运行环境,通常会有以下环境:

本地开发环境
测试环境
生产环境
在不同环境中,我们可能会使用不同的数据库或邮件发送驱动等配置,这时候则需要通过 .env 文件来针对不同的运行环境作不同的设置。

环境变量
在自动化测试中,有时需要借助环境变量实现某些特定的目的,常见的场景包括:

切换测试环境
切换测试配置
存储敏感数据(从信息安全的角度出发)
Windows系统中使用 set 命令设置环境变量和值,接下来设置以下变量

host = http://127.0.0.1:8000 设置host值,可以一键切换运行的环境
user = test 设置登陆账号和密码,切换账号测试
psw = 123456 设置登陆账号和密码,切换账号测试
打开cmd,使用 set key=value 格式设置环境变量(linux使用 export 命令)
 

C:\Users\dell>set host=http://127.0.0.1:8000C:\Users\dell>set name=testC:\Users\dell>set password=123456

查看环境变量值使用 set keyname 查看对应的值

C:\Users\dell>set host
host=http://127.0.0.1:8000C:\Users\dell>set name
name=testC:\Users\dell>set password
password=123456

在windows系统里面,命令行引用变量用 %var%

C:\Users\dell>echo 账号:%name%
账号:test

在python中引用刚才设置的环境变量,先导入os模块,用 os.environ 方法获取(environ是在os.py中定义的一个dict environ = {})

C:\Users\dell>python
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ.get('host')
'http://127.0.0.1:8000'
>>> os.environ.get('name')
'test'
>>> os.environ.get('password')
'123456'
>>>

所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改。也就是说当关闭此cmd命令行窗口后,将不再起作用。
永久性修改环境变量的方法可以通过我的电脑→属性→高级,来设置系统的环境变量。        

.env 文件设置环境变量
在cmd设置的环境变量没法存储,所以需要创建用过.env文件来存放环境变量,存储采用 name=value 的格式:
winodws无法直接创建 .env 的文件,会提示文件名不能为空,这里使用 pycharm 新建用过 .env 文件
(或者你新建用过 1.env 的文件,在cmd窗口重命名 rename 1.env .env)

# .env
host=http://127.0.0.1:8000
name=test
password=123456

接下来在debugtalk.py中写一个ENV函数,用于读取环境变量,用于在 YAML/JSON 脚本中直接引用环境变量
(在 HttpRunner 2.x版本中内置了函数 environ(简称 ENV))

# debugtalk.py
import osdef ENV(keyname):'''获取环境keyname对应的值:return:'''value = os.environ.get(keyname, '')return value

HttpRunner 运行时,会自动将.env文件中的内容加载到运行时(RunTime)的环境变量中,然后在运行时中就可以对环境变量进行读取了。

脚本案例

引用环境变量使用ENV函数 ${ENV(keyname)

- config:name: logincasevariables: {}request:base_url: ${ENV(host)}      # 引用环境变量host值
- test:name: login case1request:url: /api/v1/login/method: POSTheaders:Content-Type: application/jsonUser-Agent: python-requests/2.18.4json:username: ${ENV(name)}  # 引用环境变量name值password: ${ENV(password)}        # 引用环境变量password值extract:- token: content.token     # 提取tokenvalidate:- eq: [status_code, 200]- eq: [headers.Content-Type, application/json]- eq: [content.msg, login success!]- eq: [content.code, 0]

运行用例

D:\soft\untitled\projectdemo>hrun test_env_demo.yml
INFO     Loading environment variables from D:\soft\untitled\projectdemo\.env
login case1
INFO     POST /api/v1/login/
INFO     status_code: 200, response_time(ms): 517.84 ms, response_length: 109 bytes
INFO     start to extract from response object.
INFO     start to validate.
.----------------------------------------------------------------------
Ran 1 test in 0.525sOK
INFO     Start to render Html report ...
INFO     Generated Html report: D:\soft\untitled\projectdemo\reports\1569661053.htmlD:\soft\untitled\projectdemo>

如果.env文件和debugtalk不在同一个文件夹下,可以使用 --dot-env-path 参数指定.env的路径

hrun test_env_demo.yml --dot-env-path /path/to/.env
可以设置--log-level 参数为debug模式,查看更加详细的运行日志
 

>hrun test_env_demo.yml --log-level debug
INFO     Loading environment variables from D:\soft\untitled\projectdemo\.env
DEBUG    Loaded variable: host
DEBUG    Loaded variable: name
DEBUG    Loaded variable: password
login case1
DEBUG    call hook: ${setup_hook_prepare_kwargs($request)}
INFO     POST /api/v1/login/
DEBUG    request kwargs(raw): {'headers': {'content-type': 'application/json', 'user-agent': 'python-requests/2.18.4'}, 'json': {'username': 'test', 'password': '123456'}}
DEBUG    processed request:
> POST http://127.0.0.1:8000/api/v1/login/

在 HttpRunner 2.x版本中内置了函数 environ(简称 ENV)

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

文档获取方式:

加入我的软件测试交流群:632880530免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8 缺失数

无脑蛮力 #include <iostream> #include <vector>using namespace::std; using std::cout; using std::cin; int main() {int num;vector<int> nums;while(cin >> num){nums.push_back(num);if(getchar()\n) {break;}}int t,nnums.size();for(int i0…

MyBatis——MyBatis的动态SQL

MyBatis的动态SQL 创建工程&#xff1a; 1.什么是动态SQL? MyBatis的映射文件中支持在基础SQL上添加一些逻辑操作&#xff0c;并动态拼接成完整的SQL之后再执行&#xff0c;以达到SQL复用、简化编程的效果。 2.if标签 我们根据实体类的不同取值&#xff0c;使用不同的SQL语…

每次maven刷新jdk都要重新设置

pom.xml <java.version>17</java.version> 改为<java.version>1.8</java.version>

linux:下载、网络请求、端口

一&#xff1a;ping命令 可以通过ping命令,检查指定的网络服务器是否是可联通状态 语法: ping [-c num] ip或主机名 1、选项&#xff1a;-c,检查的次数&#xff0c;不使用-c选项&#xff0c;将无限次数持续检查 2、参数&#xff1a;ip或主机名&#xff0c;被检查的服务器的…

个人百度百科词条怎么创建?

什么人可以上百科&#xff1f;个人百度百科词条的创建通常针对公众人物、知名专家、学者、艺术家、企业家等具有一定社会影响力和知名度的人物。所以当你拥有一个百度百科词条的时候&#xff0c;知名度和形象自然会显著提升。个人百度百科词条怎么创建&#xff1f;接下来伯乐网…

Ensp dhcp全局地址池(配置命令 + 实例)

使用DHCP的好处&#xff1a;减少管理员的工作量、避免输入错误的可能、避免ip冲突 DHCP报文类型&#xff1a; DHCP DISCOVER:客户端用来寻找DHCP服务器 DHCP OFFER:DHCP服务器用来响应DHCP DISCOVER报文&#xff0c;此报文携带了各种配置信息 DHCP REQUEST:客户端配置请求确…

ArcGIS基础:便捷查看外业照片及识别举证照片方位角

打开工具&#xff1a;【地理标记照片转点】。 打开工具后&#xff0c;输入文件夹&#xff0c;并对相应的参数进行勾选。 右键&#xff0c;图层属性&#xff0c;打开【显示】&#xff0c;对【超链接】设置等参数进行勾选。 找到【符号系统】&#xff0c;点击【高级】&#xff…

关于合同能源管理

合同能源管理模式&#xff1a;我投资、你节能、收益共享 合同能源管理&#xff08;EPC——Energy Performance Contracting&#xff09;&#xff1a;节能服务公司与用能单位以契约形式约定节能项目的节能目标&#xff0c;节能服务公司为实现节能目标向用能单位提供必要的服务&…

并发程序设计--D1进程的创建和回收

进程和程序内容区别 进程包含的内容&#xff1a; BSS段&#xff1a;存放程序中未初始化的全局变量 数据段&#xff1a;已初始化的全局变量 代码段&#xff1a;程序执行代码 堆&#xff08;heap&#xff09;&#xff1a;malloc等函数分配内存 栈(stack)&#xff1a;局部变量…

移动开发新的风口?Harmony4.0鸿蒙应用开发基础+实践案例

前段时间鸿蒙4.0引发了很多讨论&#xff0c;不少业内人士认为&#xff0c;鸿蒙将与iOS、安卓鼎足而三了。 事实上&#xff0c;从如今手机操作系统竞赛中不难看出&#xff0c;安卓与iOS的形态、功能逐渐趋同化&#xff0c;两大系统互相取长补短&#xff0c;综合性能等差距越来越…

蓝桥杯嵌入式LED

1.LED原理图 2.CubeMX的LED的GPIO 3.创建LED.c和.h文件添加到bsp文件 添加bsp文件路径在c/c中 4.LED相关代码

云卷云舒:算力网络+云原生(中):探索构建算力网络数据库

一、导言 1、基础要求&#xff1a;算力网络时代&#xff0c;数据类型、范围充分延展和爆发&#xff0c;数据库也要适应起来&#xff0c;分布式数据库是起步要求&#xff1b; 2、近期需求&#xff1a;通过云服务的方式提供算网时代&#xff0c;尤其是智能大模型所需要的向量数…