angular中如何添加config配置文件_自动化测试中,如何读取配置文件内容?

fccff5c791526b008e085f1f937f94ea.png

构建测试知识体系,欢迎关注

 自动化中的配置信息,比如域名、数据库信息、kafka信息等,通常是放到配置文件中的。那么如何读取配置文件中的信息呢?

自动化测试代码中,像请求域名host在不同的测试脚本都会用到,应该放到一个公共的地方来维护,而不是在测试脚本或者测试数据文件中硬编码。这样如果需要对其进行修改,那么只需要修改一个地方就可以了。

除了域名host外,其他与测试环境相关的配置信息,比如数据库信息、kafka连接信息等,以及与测试环境相关的基础测试数据,比如测试账号,都可以放到配置文件中。

很多时候,我们会有不同的测试环境,比如dev环境、test环境、stg环境、prod环境等。在项目的根目录下,创建config文件夹,下面创建子目录来区分不同的测试环境,在子目录中创建config.yaml配置文件。

因此config文件夹,应该是类似这样的结构:

├── config│   ├── stg│   │   └── config.yaml│   └── test│       └── config.yaml

01

配置文件放什么信息

在config.yaml中存放不同环境的配置信息,比如域名host、mysql数据信息:

host:  douban: http://api.douban.commysql:  database1:    host: localost    port: 3306    user: root    password: root    database: api_test    autocommit: True    cursorclass: pymysql.cursors.DictCursor    charset: utf8mb4

02

读取配置信息

在自动化测试项目tests/目录中创建一个文件conftest.py,定义一个fixture函数env,用来读取配置文件信息:

@pytest.fixture(scope="session")def env(request):    config_path = os.path.join(request.config.rootdir,                                "config",                                "test",                                "config.yaml")    with open(config_path) as f:        env_config = yaml.load(f.read(), Loader=yaml.SafeLoader)    return env_config

这时env_config中就包含了config.yaml中的配置信息了。

env函数中有一个参数request,其实request也是一个fixture函数。在这里用到了它的request.config.rootdir属性,这个属性表示的是pytest.ini这个配置文件所在的目录,因为我们的测试项目中pytest.ini处于项目的根目录,所以config_path的完整路径就是:

/Users/chunming.liu/learn/api_pytest/config/test/config.yaml

03

脚本中使用配置信息

将env作为参数传入测试函数test_env,将测试函数内的host改为从env读取:

def test_env(self, env):    r = requests.request("GET",                         url=env["host"]["douban"] + "/v2/movie/in_theaters",                         headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"},                         params={"apikey": "0df993c66c0c636e29ecbb5344252a4a",                                 "start": 0,                                 "count": 10})    response = r.json()

这样就达到了测试配置文件与测试脚本相互分离的效果,如果需要修改host,只需要修改配置文件即可,测试脚本文件就不用修改了。修改完成后执行测试的方法不变。

04

读取不同的配置信息

上面的env函数实现中,有点点小缺憾,就是读取的配置文件是固定的,读取的都是test环境的配置信息,我们希望在执行测试时,通过命令行选项,可指定读取哪个环境的配置,以便在不同的测试环境下开展测试。Pytest提供了一个叫作pytest_addoption的Hook函数,可以接受命令行选项的参数,写法如下:

def pytest_addoption(parser):    parser.addoption("--env",                     action="store",                     dest="environment",                     default="test",                     help="environment: test or prod")

pytest_addoption的含义是,接收命令行选项--env选项的值,存到environment变量中,如果不指定命令行选项,environment变量默认值是test。将上面代码也放入conftest.py中,并修改env函数,将os.path.join中的"test"替换为request.config.getoption("environment"),

@pytest.fixture(scope="session")def env(request):    config_path = os.path.join(request.config.rootdir,                                "config",                                request.config.getoption("environment"),                                "config.yaml")    with open(config_path) as f:        env_config = yaml.load(f.read(), Loader=yaml.SafeLoader)    return env_config

这样就可以通过命令行选项来控制读取的配置文件了。比如执行stg环境的测试,可以指定--env stg:

$ py.test --env stg tests/test_env.py

如果不想每次都在命令行上指定--env,还可以将其放入pyest.ini中:

[pytest]addopts = --env stg

注意,命令行上的参数会覆盖pyest.ini里面的参数。

05

总结

本文将公共参数放入到配置文件中,通过env这个fixture函数读取配置文件信息,就可以在测试函数中使用配置内容了。再通过pytest_addoption 添加命令行参数指定选取哪个目录下的配置文件。

ddd09d78a9a1c92649d1d402d2bda981.gif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值