HttpRunner HttpRunner 针对敏感数据的处理机制

debugtalk · 2018年02月27日 · 最后由 淳罡 回复于 2018年10月26日 · 2962 次阅读

背景

很多时候项目代码在运行时需要使用到账号、密码、key 等敏感数据信息,但是从信息安全的角度考虑,我们是不能将这些敏感数据提交到代码仓库的,主要原因有两个:

  • 加强权限管控:参与项目的开发人员可能会有很多,大家都有读取代码仓库的权限,但是像 key 这类极度敏感的信息不应该所有人都有权限获取;
  • 减少代码泄漏的危害性:假如代码出现泄漏,敏感数据信息不应该也同时泄漏。

解决方案

那代码部署到服务器或 Jenkins 执行机后,运行时要使用到这些敏感数据信息,该怎么操作呢?

推荐的操作方式为:

  • 对服务器进行权限管控,只有运维人员(或者核心开发人员)才有登录服务器的权限;
  • 运维人员(或者核心开发人员):在运行的机器上将敏感数据设置到系统的环境变量中;
  • 普通开发人员:只需要知道敏感信息的变量名称,在代码中通过读取环境变量的方式获取敏感数据。

存储敏感数据

将敏感数据设置到系统的环境变量中,传统的方式为使用 export 命令:

$ export UserName=admin
$ echo $UserName
admin
$ export Password=123456
$ echo $Password
123456

$ python
>>> import os
>>> os.environ["UserName"]
'admin'

除了这种方式,HttpRunner 还借鉴了 pipenv 加载.env的方式

在项目中,创建.env文件,将敏感数据信息放置到其中,存储采用name=value的格式:

$ cat .env
UserName=admin
Password=123456
PROJECT_KEY=ABCDEFGH

同时,.env文件不应该添加到代码仓库中,建议将.env加入到.gitignore中。

默认情况下,.env文件应该位于运行hrun命令的同级目录下,在此情况下,运行hrun命令时就会自动将.env文件中的内容加载到运行时的环境变量中。

假如.env文件位于其它位置,或者采用了不同的文件名称,那么就需要采用--dot-env-path参数指定文件路径:

$ hrun /path/to/testset.yml --dot-env-path /path/to/.env --log-level debug
INFO     Loading environment variables from /path/to/.env
DEBUG    Loaded variable: UserName
DEBUG    Loaded variable: Password
DEBUG    Loaded variable: PROJECT_KEY
...

使用敏感数据

debugtalk.py 文件中,通过 os.environ 获取指定的环境变量数据。

import os

UserName = os.environ["UserName"]           # admin
Password = os.environ["Password"]           # 123456
PROJECT_KEY = os.environ["PROJECT_KEY"])    # ABCDEFGH

然后,在 YAML/JSON 格式的测试用例中,就可以通过$var的方式获取到敏感数据了。

- test:
    name: login
    request:
        url: http://host/api/login
        method: POST
        headers:
            Content-Type: application/json
        json:
            username: $UserName
            password: $Password
        validate:
            - eq: [status_code, 200]
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 5 条回复 时间 点赞

httpRunner 目前支持用例执行环境的配置嘛?@debugtalk

期望:可在执行一个项目的测试时,选择用例的执行环境,比如线下环境,或者线上环境
目前解决方案

  1. 一个线下环境的 env 文件,一个线上环境的 env 文件;env 文件定义不同的 http 的域名和账号信息
  2. 执行用例时,选择不同的 env 文件
  3. debugtalk.py 中读取环境变量:http 域名、账号信息
debugtalk 回复

感谢!

hi,我想咨询一下,在使用分层的 api 时,我这样调用函数
t: "${gettime([1,2,3])}"
发现并没有去调函数,想问问如何在调函数的时候,直接传列表或者字典

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册