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获取命令行功能判断出是希望在测试执行还是生产执行,更新变量状态;全局变量保存两套环境配置信息,根据命令行参数进行筛选。

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

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

相关推荐
MLGDOU3 分钟前
【Qt开发】信号与槽
开发语言·数据库·qt
龙文浩_3 分钟前
AI机器学习中NumPy随机种子的应用
人工智能·python·深度学习·神经网络·机器学习
大江东去浪淘尽千古风流人物8 分钟前
【Basalt】 VIO(sqrt_keypoint_vio)主流程measure函数梳理
数据库·人工智能·python·机器学习·oracle
风萧萧199910 分钟前
Milvus Java 快速入门
java·开发语言·milvus
FelixZhang02823 分钟前
从 PDF 到 AI 知识库:RAG 数据预处理的六步标准流水线 (SOP)
人工智能·python·目标检测·计算机视觉·语言模型·ocr·numpy
凌盛羽29 分钟前
在MDK-ARM编译后用python解析map文件在编译窗口输出Flash和RAM使用及剩余情况
arm开发·python·stm32·单片机·mysql·链表·esp32
2301_8101545532 分钟前
CVE-2019-6341 漏洞复现
java·开发语言
GuokLiu32 分钟前
260331-OpenWebUI统计所有Chat的对话字符个数
python
哈伦201932 分钟前
Python 生成随机数
python·机器学习·pandas
zzwq.35 分钟前
魔法方法 __init__ 与 __new__ 的区别与使用场景
python