前言

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

  • 本地开发环境
  • 测试环境
  • 生产环境

在不同环境中,我们可能会使用不同的数据库或邮件发送驱动等配置,这时候则需要通过 .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:8000

C:\Users\dell>set name=test

C:\Users\dell>set password=123456

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

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

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

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

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

# 上海悠悠,QQ交流群:750815713
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 os
# 上海悠悠,QQ交流群:750815713 def ENV(keyname):
'''
获取环境keyname对应的值
:return:
'''
value = os.environ.get(keyname, '')
return value

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

脚本案例

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

# 上海悠悠,QQ交流群:750815713
- config:
name: logincase
variables: {}
request:
base_url: ${ENV(host)} # 引用环境变量host值
- test:
name: login case1
request:
url: /api/v1/login/
method: POST
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
json:
username: ${ENV(name)} # 引用环境变量name值
password: ${ENV(password)} # 引用环境变量password值
extract:
- token: content.token # 提取token
validate:
- 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.525s OK
INFO Start to render Html report ...
INFO Generated Html report: D:\soft\untitled\projectdemo\reports\1569661153.html D:\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)

httprunner学习13-环境变量.env的更多相关文章

  1. NodeJS学习:环境变量

    简介 环境变量(environment variables) 不属于 NodeJS 范畴,它是操作系统用于设定执行环境的参数.会在程序运行时传递给应用程序. NodeJS 获取环境变量,是通过 glo ...

  2. bash学习之环境变量

    1.查看系统存在的环境变量env 和 export env命令:查看环境变量 [CJP@CJP ~]$ env HOSTNAME=CJP SHELL=/bin/bash HISTSIZE=1000 U ...

  3. Shell学习之环境变量配置文件(三)

    Shell学习之环境变量配置文件 目录 环境变量配置文件简介 环境变量配置文件作用 其他配置文件和登录信息 环境变量配置文件简介 环境变量配置文件简介 环境变量配置文件中主要是定义对系统操作环境生效的 ...

  4. FastAdmin 环境变量 env 配置

    FastAdmin 环境变量 env 配置 目前 FastAdmin 支持环境变量 env 配置. 目前支持以下环境变量 app.debug app.trace database.type datab ...

  5. linux 学习:环境变量设置

    一.临时环境变量 临时环境变量,只对当前打开的shell生效,shell关闭后,环境变量失效. 设置方法一: 分两步 MYPARA=hello export MYPARA 设置方法二:一步完成 exp ...

  6. 添加用户useradd,给用户设置修改密码passwd,修改用户信息usermod,修改用户密码状态chage,删除用户userdel,查询用户及组id,切换用户su,查看当前环境变量env

    useradd 用户名 passwd 用户名,给指定用户设密码 passwd给当前用户设密码 添加一个用户系统会自动在以下文件或目录创建对应用户信息: [root@localhost ~]# grep ...

  7. Shell学习笔记 - 环境变量配置文件(转)

    一.source命令 功能:在当前bash环境下读取并执行配置文件中的命令 1. 命令格式 source 配置文件  或  . 配置文件 2. 命令示例 [root@localhost ~]# sou ...

  8. Shell学习笔记 - 环境变量配置文件

    一.source命令 功能:在当前bash环境下读取并执行配置文件中的命令 1. 命令格式 source 配置文件  或  . 配置文件 2. 命令示例 [root@localhost ~]# sou ...

  9. Java基础学习-Path环境变量的配置

    1.为什么要进行Path环境变量的配置       程序的编译和执行需要使用到javac和java命令,所以只能在bin目录下写程序,而实际开发中,我们不可能将程序全部写到bin目录下,所以我们不许让 ...

随机推荐

  1. SKF密码设备研究

    SKF介绍 SKF接口是国密标准中智能密码钥匙的C语言应用开发接口标准,目前很多国内密码密码设备厂商都为其产品提供了SKF接口的开发包.开发者可以通过统一的SKF接口开发密码应用,访问来自不同设备供应 ...

  2. 简单说说JavaScript的Generator 实现(ES6)

    Generator 是 ES6 中新增的语法,和 Promise 一样,都可以用来异步编程 // 使用 * 表示这是一个 Generator 函数 // 内部可以通过 yield 暂停代码 // 通过 ...

  3. 【2019年05月13日】A股ROE最高排名

    个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名. 兰州民百(SH600738) - 滚动ROE:86.45% - 滚 ...

  4. .net core使用AutoMapper

    AutoMapper文档:http://docs.automapper.org/en/stable/The-MyGet-build.html 新的版本抛弃了静态API方法,我们将使用依赖注入来完成. ...

  5. Qt SDK Issue cstdlib: fatal error: stdlib.h: No such file or directory

    *To reproduce the issue, I've tried the following solutions which did not help:* *1) Globally remove ...

  6. MarkDown的常规用法

    MarkDown的常规用法 标题 # 一级标题 ## 二级标题 ... ###### 六级标题 列表 第二级 - 和 空格 + 和 空额 * 和 空格 第三级 代码块 多行代码块 3个` 回车 单行代 ...

  7. Nginx Tutorial #1: Basic Concepts(转)

    add by zhj: 文章写的很好,适合初学者 原文:https://www.netguru.com/codestories/nginx-tutorial-basics-concepts Intro ...

  8. 立个铁矿石的flag,从7月初开始,铁矿石的库存,可能要进入累库存阶段了.

    从发货量倒推出的到货量,用来评估未来的到货量 推测的到港量与实际北方6港到港量的关系 通过月度到港量,估计出北方6港对全国到港量的正确性. 悲观的库存预期 乐观的库存预期 大概率的情况吧

  9. WinForm的TextBox限制只能输入数字并且屏蔽默认右键菜单

    基于Window消息实现 class TextBoxExt:TextBox { private const int WM_RBUTTONDOWN = 0x0204; private const int ...

  10. 根据语义来选择:value-like传副本, pointer-like传引用

    ★ (一个成员)变量的 创建.初始化.赋值 “默认值”:内置类型的局部变量.内置类型的成员变量(未设置=initval;) 没有默认值!  若创建时不指定值,则不进行初始化.则其值未定义!!! “指定 ...