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

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

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

相关推荐
机器学习之心25 分钟前
小波增强型KAN网络 + SHAP可解释性分析(Pytorch实现)
人工智能·pytorch·python·kan网络
JavaEdge在掘金31 分钟前
MySQL 8.0 的隐藏索引:索引管理的利器,还是性能陷阱?
python
站大爷IP42 分钟前
Python办公自动化实战:手把手教你打造智能邮件发送工具
python
chao_7891 小时前
回溯题解——子集【LeetCode】二进制枚举法
开发语言·数据结构·python·算法·leetcode
zdw1 小时前
fit parse解析佳明.fit 运动数据,模仿zwift数据展示
python
剑桥折刀s2 小时前
Python打卡:Day46
python
巴里巴气2 小时前
Python爬虫图片验证码和滑块验证码识别总结
爬虫·python
尘世闲鱼3 小时前
解数独(C++版本)
开发语言·c++·算法·解数独
sword devil9003 小时前
PYQT实战:智能家居中控
python·智能家居·pyqt
NetX行者3 小时前
FastMCP:用于构建MCP服务器的开源Python框架
服务器·python·开源