自动化登录接口的excel表格用例执行

1.pytest自动化测试框架需要有
config/: 配置文件
database/: 测试用例模板文件即数据库和邮箱发送配置
db_fixture/:初始化接口测试模板
lib/:程序公用模板 包含excel读写、发送邮件、发送请求、生成最新的测试报告文件
report/: 生成接口自动化测试报告
testcase/: 测试用例
run.py 执行所有接口测试用例的主程序


接口自动化测试用例的维护方法:1.Excel 2.yaml 3.db数据库 4.代码
以db和代码维护的是精细化场景。用Excel和yaml维护的用例通常用于回归和冒烟为主

用例加在testcase中。请求 URL:http://121.41.14.39:9097/api/loginS 前面的维护在配置文件中
2.配置文件要有环境设置
2.1envSettings.py,测试环境、预生产环境、正式环境不同环境的URL不同。环境维护在一个字典里


-- coding:utf-8 --

环境字典,用来维护所有的环境地址

env_dict = {
"test": "http://324234:899", # 测试环境的地址(我乱写的,实际不存在
"uat": "http://4324234:6868", # 预生产环境的地址(我乱写的,实际不存在
"pro": "http://121.41.14.49:9097" # 这个地址同学们可以访问
}

指向当前环境

current_env = "pro"

请求地址

current_url = env_dict[current_env]
2.2配置文件中关于路径文件pathSettings.py--------

--- coding:utf-8 ---

维护路径相关的文件

import os

动态获取项目根路径,

os.path.dirname(file)作用:无论在哪个电脑上都能取得pathSettings.py绝对路径,向上两层就是项目根路径

base_dir = os.path.dirname(os.path.dirname(file))

测试用例所在文件夹路径

test_case_dir = os.path.join(base_dir, "testcase")
if name =='main':
print(base_dir)
print(test_case_dir)
3.lib中要有public.py文件---------

-- coding:utf-8 --

import hashlib
def get_md5(pwd):
"""
处理数据,返回md5加密后的结果
:param pwd: 需要加密的内容
:return: 加密后的结果
"""
# 实例化一个 MD5对象
md5 = hashlib.md5()
# 调用加密方法进行加密
md5.update(pwd.encode("utf8"))
return md5.hexdigest() # 返回十六进制的加密结果
if name == 'main':
print(get_md5("123abc"))
4.testcase中有case.xlsx,如下图--------

image.png

需要一个test_login_case.py文件来执行用例如下。

--- coding:utf-8 ---

import os
import json
import pytest
import requests
import pandas as pd # 处理excel的模块
from config.envSettings import current_url # 项目环境地址
from lib.public import get_md5 # 加密密码
from config.pathSettings import test_case_dir

读取excel

def read_case(path, sheet_name):
# 从Excel中指定的sheet页读出数据
df = pd.read_excel(path, sheet_name=sheet_name)

# 处理空单元格的  固定用法
df.fillna("", inplace=True)
# 处理掉空单元格,得到的还是一行一行数据,转为字典格式,有4个字典用列表维护,把字典依次存储在一个列表中

# 1-初始化一个空列表
df_list = []
# 2-循环处理Excel中的数据
for i in df.index.values:
    # 得到的i是一行数据,组成字典需要读一下.
    df_line = df.loc[i, ["用例编号", "用例名称", "用例说明", "接口地址路径",
                         "请求方式", "请求头", "请求参数", "预期结果",
                         "预期返回数据", "实际返回数据", "测试结果"]].to_dict()

用中括号读出的标题“用例编号 "用例名称"...”做为字典的key,每个表格中做为value

将每一行转换成字典的数据,添加进列表

    df_list.append(df_line)
#返回列表中数据
return df_list

pytest 数据驱动--参数化执行测试用例

以下代码,会从case.xlsx中读出所以的测试赛用例数据,一次带入test login函数执行

@pytest.mark.parametrize("case_data", read_case(os.path.join(test_case_dir, "case.xlsx"), "1-登录模块"))

装饰器:在不修改原函数代码的情况下为函数添加新的功能

在不修改测试环境登录接口的函数,为函数增加两个循环

def test_login_case(case_data):

1--构造接口请求的url

url = "".join([current_url, case_data["接口地址路径"]])   #字符串的内置方法
print("\n****步骤一****")
print("接口请求的地址是", url)

2--构造接口请求参数

将请求参数读出,并将字符串转换为字典;;json.dumps()函数可将字典转换为字符串

payload = json.loads(case_data["请求参数"])
# -将密码明文加密
payload["password"] = get_md5(payload["password"])     #字典中键值对的重新赋值
print("\n****步骤二****")
print("接口参数是", payload)

3--发送请求并获取请求结果

req = requests.post(url=url, json=payload)
print("\n****步骤一****")
print("请求结果是", req)

4--断言

assert req.status_code == 200   #接口是通的,正常工作
#assert req.json()["token"] is not None

if name == 'main':
pytest.main(["-s", "--alluredir=./report"])
--运行test_login_case.py后会在testcase下生成report,
在cmd者pycharm终端输入;allure serve ./testcase/report 可打开测试报告。如下图
excel只能执行结果为通过的用例。

你可能感兴趣的:(自动化登录接口的excel表格用例执行)