27、pytest实战:一套用例同时验证生产、测试两个环境

前提

  • 生产与测试环境接口地址相同,只是域名不同,例,生产环境为http://192.168.1.40,测试环境为http://192.168.1.50
  • 生产环境有严格要求,只允许查询操作,不允许进行增删改;测试环境可进行所有操作。

技能点

  • 获取命令行入参argv
  • pytest的mark标记

代码实现

shell 复制代码
# 目录结构
|----pytest.ini
|
|----conftest.py
|
|----data
|    |
|    |----userinfo.py
|
|----case
     |
     |----monitor_sample
             |
             |----conftest.py
             |
             |----test_monitor_sample.py
ini 复制代码
# content of pytest.ini
[pytest]
markers = test: test environment
            prod: product environment
python 复制代码
# content of root conftest.py
import pytest

@pytest.fixture
def cmdopt(request):
	return request.config.getoption("--env")
    
    
def check_prod_env():
	try:
		if '-m' in sys.argv[1:]:
			index = sys.argv[1:].index('-m')
			if sys.argv[1:][index+1] == 'prod':
				return True
		return False
	except:
		return False
python 复制代码
# content of userinfo.py
import time
import sys

project_info = {
	'test':{
		'app_base_url':'http://192.168.1.50',
		'user_info':{
			'管理员':('testuser','testpassowrd'),
		},
		'database_info':{
			'url':'',
			'username':'',
			'password':'',
			'port':3306,
			'db_name':{
				'测试创新应用':'',
			}
		}
	},
	'prod':{
		'app_base_url':'http://192.168.1.40',
		'user_info':{
			'管理员':('produser','prodpassword'),
		},
		'database_info':{
			'url':'',
			'username':'',
			'password':'',
			'port':3306,
			'db_name':{
				'生产创新应用':'',
			}
		}
	}
}

def check_prod_env():
	try:
		if '-m' in sys.argv[1:]:
			index = sys.argv[1:].index('-m')
			if sys.argv[1:][index+1] == 'prod':
				return True
		return False
	except:
		return False
python 复制代码
# content of app dir conftest
import pytest
from data.userinfo import *

@pytest.fixture()
def get_app_url():
    token_dict = {}
    env_str = 'test'
    if check_prod_env():
        env_str = 'prod'
    app_base_url = project_info[env_str]['app_base_url']
    return app_base_url
python 复制代码
# content of test_monitor_sample.py
import pytest

class TestMoitorSample():
    '''
    测试实例应用,查询、更新功能
    '''
    
    @pytest.mark.prod
    @pytest.mark.test
    def test_monitor_sample_search_data(self,get_app_url):
        '''
        测试查询数据功能
        :param get_app_url:
        :return:
        '''
        print("查询数据,获取应用地址为:{}".format(get_app_url))
        assert 1


    @pytest.mark.test
    def test_monitor_sample_insert_data(self,get_app_url):
        '''
        测试更新数据功能
        :param get_app_url:
        :return:
        '''
        print("插入数据,获取应用地址为:{}".format(get_app_url))

场景应用

利用mark标志可用于筛选哪些用例在测试环境运行,哪些在生产环境运行;利用python获取命令行功能判断出是希望在测试执行还是生产执行,更新变量状态;全局变量保存两套环境配置信息,根据命令行参数进行筛选。

执行测试环境用例并打印输出

执行生产环境用例并打印输出

相关推荐
统计学小王子17 小时前
数学建模国赛倒计时 1 天 ——《统计模型精讲(逐步回归 R 语言实战篇)》
开发语言·数学建模·r语言
ttwuai17 小时前
Go 后台接入单点登录后,JWT、菜单权限和接口 403 怎么验?
开发语言·后端·golang
qeen8717 小时前
【C++】C++中的错误处理机制-异常
开发语言·c++·异常
步行cgn17 小时前
OCP开闭原则:面向对象设计的核心原则
java·开发语言·开闭原则
曹牧17 小时前
C#:模态对话框
开发语言·c#
en.en..18 小时前
Linux wait()函数(预防僵尸进程)
java·大数据·开发语言
用户03321266636718 小时前
快速合并 Word 文档【Python 指南】
python
威联通网络存储18 小时前
TS-h987XU-RP 在化工制造批次数据场景的部署
python·制造
扬大平仔18 小时前
小深:用 AgentScope Java 2.0 Harness 做私人助手(上)
java·开发语言
m0_5474866618 小时前
《Python爬虫大数据采集与挖掘》全套PPT课件2026
爬虫·python·powerpoint