自动化登录接口的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只能执行结果为通过的用例。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342