首页 > 其他分享 >httprunner测试框架(一):支持不同环境执行

httprunner测试框架(一):支持不同环境执行

时间:2024-04-29 20:46:38浏览次数:26  
标签:httprunner 测试 框架 env 环境 value json values key

 首先,httprunner已经是一个较完善的接口测试框架了,基本可以拿来即用,本文提供一种支持不同环境执行用例的实现思想,其余部分均是采用httprunner脚手架搭建



- httprunner工作原理:执行前会先加载.env文件,将.env文件中的内容加载到内存中,如下图所示

 




- .env文件
htttprunner可以获取.env文件中的环境变量,因此,可以通过如下角度实现:
1、先获取当前的执行环境,通过方法:${ENV(envType)}
2、通过json/yml文件维护一份环境信息,用于区分不同环境,如:账号、密码、域名等
- 环境信息格式:

{
"id": "873e1ffa-9b86-41ab-b541-99c22a173007",
"name": "环境1",
"values": [
{
"key": "host",
"value": "www1.test.vip",
"type": "default",
"enabled": true,
"remarks": "域名"
},
{
"key": "username",
"value": "邱开亮2",
"type": "default",
"enabled": true,
"remarks": "用户名"
}
]
}

 

- 框架结构(每个环境单独维护一个文件,如截图中所示)

 

- 读取所有环境信息,汇聚list存储所有环境信息(和上述环境信息存在同一文件夹下,命名:env.py)


import json
import os
import sys

sys.path.append('..')
from log.log import MyLog


path = ''
# MyLog.debug('环境变量文件路径 ->{}'.format(path))


def getValues_ofEnv(dir):
"""
:param dir: env.json文件路径
:return: env.json文件{key:"",value:""}值
"""
with open(dir, 'rb') as f:
data = json.load(f)
return data


envFileList = [path + 'env14.json', path + 'envIM.json', path + 'envCN.json']
dataList = [getValues_ofEnv(envFileList[0]), getValues_ofEnv(envFileList[1]), getValues_ofEnv(envFileList[2])]


def getValueByKey(values, key):
"""
:param values: env.json文件{key:"", value:""}值
:param key: env.json文件key字段对应值
:return: env.json文件中value字段值
"""
for i in values:
# i = {'key': 'host', 'value': 'www14.teacherin.vip', 'type': 'default', 'enabled': True}
if i['key'] == key:
return i['value']
else:
return ''


def getAllEnvList():
"""
:return: 所有环境的变量key 以及其对应不同环境value值,形如
{'key': 'host', 'value14': 'www14.teacherin.vip', 'valueIM': 'www.teacherin.vip', 'valueCN': 'www.teacherin.cn'}
"""
env14 = dataList[0]['values']
env_list = []
for j in range(len(env14)):
# env14[j] = {'key': 'host', 'value': 'www14.teacherin.vip', 'type': 'default', 'enabled': True}
key = list(env14[j].values())[0]
value14 = list(env14[j].values())[1]
remarks = list(env14[j].values())[-1]
env_dict = {
"key": key,
"remarks": remarks,
"value14": value14,
"valueIM": getValueByKey(dataList[1]['values'], key=key),
"valueCN": getValueByKey(dataList[2]['values'], key=key)
}
env_list.append(env_dict)

return env_list

allEnvList = getAllEnvList()
# print(allEnvList)
 

 

3、编写自定义方法,过步骤1中的得出的执行环境查询当前环境的数据
- 结合debugtalk.py文件实现(以下代码在debugtalk.py中编写)

from environment.env import allEnvList, getAllEnvList
def getValeByEnvType(key, envType):
    # MyLog.debug('环境-->:{}'.format(envType))
    target = 'value' + str(envType)
    for i in allEnvList:
        if i['key'] == key:
            return i[target]
    return 'NUll'

 

4、具体使用

1. 每个用户的config中,先获取环境的值
2. 在用例的全局变量中,获取个环境的信息(调用debugtalk方法)
3. 用例中引用全局变量
4. 代码如下

# 执行用例前,重写.env文件即可(写在run.py方法内,run.py方法作为程序主入口)
with open(envFile, 'a') as f:
      f.truncate(0)  # 清空文件
      f.write("envType={}".format(envType))

# 用例文件
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase


class TestCaseWorkspace(HttpRunner):
    config = Config("用户访问工作台").variables(**{
        "env": "${ENV(envType)}",
        "cookie": "${getValeByEnvType(cookie,$env)}"
         }).base_url("https://${getValeByEnvType(host,$env)}").verify(False)

    teststeps = [
        Step(
            RunRequest("个人工作台-/api/v1/user/history/view/3")
            # .setup_hook("${request_update($request)}")
            .get("/api/v1/user/history/view/3")
            .with_headers(
                **{
                    "accept": "application/json, text/plain, */*",
                    "accept-encoding": "gzip, deflate, br, zstd",
                    "accept-language": "zh-CN,zh;q=0.9",
                }
            )
            .with_cookies(**{"cookie": "$cookie"})
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.code", 0)
            .assert_equal("body.message", "ok")
        )]
if __name__ == "__main__":
    TestCaseWorkspace().test_start()

 

做此改造的目的:

1. 支持多环境执行
2. .env文件维护起来比较方便
3. 将账号信息等区分不同环境且较稳定不易变化的信息单独存放,框架结构更加清晰
4. 对执行人员黑盒,减少组内成员理解不同环境成本,直接调用即可

标签:httprunner,测试,框架,env,环境,value,json,values,key
From: https://www.cnblogs.com/qinian1/p/18166604

相关文章

  • 实验三:软件测试
    一、实验题目:软件测试二、实验目的1、熟悉开发环境下的自动化测试工具;1、利用自动化测试工具进行自动化单元测试。三、实验内容1、选择开发环境,IDEA或PYCHARM任选其一;2、基于所选择的开发环境实现对输入的n个整数进行排序的代码;3、对所编写代码设计测试用例;4、基于所选择......
  • BLE --- 直接测试模式(可测天线性能)
    认识BLE协议栈——直接测试模式BLE协议充分考虑了设备的测试问题,在协议栈层面提供了直接测试模式,用于执行BLE设备的RF物理层一致性的测试。直接测试模式(DirectTestMode)常简称为DTM。DTM测试的核心工作是令设备在指定的频率上发送一段数据序列,在另一端使用测试设备接收数据......
  • 一个服务提供翻译功能,一个服务提供商品名字查询功能,客户端有多语言需求,语言占比不一样
    针对这两个服务的多语言需求和商品信息查询功能,可以设计以下测试用例:基本功能测试:1.1翻译服务:-测试用例1:输入包含英文商品信息的请求,验证翻译服务是否能够正确将英文翻译成其他语言。-测试用例2:输入包含中文商品信息的请求,验证翻译服务是否能够正确将中文翻译成其他语......
  • 服务器部署在国外,测试过程中要注意哪些方面?
    当服务器部署在国外时,在测试过程中需要特别注意以下方面:网络延迟和稳定性:由于服务器在国外,网络延迟可能较高,测试过程中需要考虑网络延迟对测试结果的影响,并确保网络连接稳定。可以使用网络监控工具来实时监测网络延迟和丢包率,以评估网络的稳定性。时区和时间差异:国外服务器......
  • 接口测试框架选择
    接口测试是现在比较有性价比的自动化测试方法目前常见的接口测试框架是1.Python+unittest+HtmlTestRunner;2.Python+Pytest+allure。下面描述一下2种框架的大概区别,可以自行判断使用的框架1、准备工作unittest是python自带的库,不用安装。可直接使用,该框架下需要仅需安......
  • openGauss MOT测试总结
    MOT测试总结MOT比磁盘表性能提升2.5至4.1倍,在Arm/鲲鹏256核服务器上达到480万tpmC。测试结果清楚表明MOT在扩展和利用所有硬件资源方面的卓越能力。随着CPU槽位和服务器核数增加,性能会随之跃升。MOT在Arm/鲲鹏架构下最高可达3万tpmC/核,在x86架构下最高可达4万tpmC/核。由于持久......
  • 使用EF框架的优化(一)
    在.Net中使用EF框架(.Net7,数据库SQLserver)在EntityFramework(EF)中,LINQ查询会被翻译成对应的SQL查询语句,以便与数据库进行交互。EF根据LINQ查询中的方法调用和操作符来进行翻译,一些常见的规则包括:1.简单的查询表达式会直接被翻译成对应的SQL语句,如SELECT、FROM、WHERE、OR......
  • 功能测试 联调测试 回归测试 三个测试关注的点有什么不一样?
     功能测试、联调测试和回归测试是软件开发周期中不同阶段的测试类型,它们关注的点有所不同:功能测试:关注点:功能测试主要关注软件的功能是否按照需求规格书或者用户期望的方式正常工作。测试人员会验证每个功能是否按照设计进行操作,是否符合预期的行为。执行......
  • 压力测试怎么真实反馈系统的性能?
    模拟真实场景:在进行压力测试时,需要模拟系统在真实生产环境下可能遇到的负载情况,包括用户数量、并发请求量、数据量等。这可以通过使用压力测试工具来模拟大量用户同时访问系统的情况。真实数据:使用真实的数据集进行测试,这样可以更好地模拟系统在实际使用中的情况。如果使用的......
  • 测试环境服务器比生产环境服务器差怎么等比换算?
    将测试环境服务器的性能转换为相当于生产环境服务器的性能需要一些考虑和估算,因为测试环境和生产环境可能有不同的配置、负载和性能要求。但是,以下是一种常见的方法:确定关键指标:首先,确定用于评估服务器性能的关键指标,例如CPU性能、内存容量、磁盘I/O速度等。性能评估:对测试......