ddt数据驱动 python_Requests Python-ddt数据驱动

本文介绍了Python中ddt模块如何实现数据驱动测试,包括安装、使用场景和具体案例。通过ddt,可以方便地从Excel读取测试数据,进行接口测试,例如测试系统登录功能。文中给出了登录接口的测试方法、测试脚本和执行测试的代码示例。
摘要由CSDN通过智能技术生成

一、数据驱动

1.pip install ddt 安装模块

152717754_1_20190124120117349

2.使用场景

(1)ddt一般是针对同一个接口,只是参数值不同,比如一个接口需要十组乃至更多组数据,写在脚本里显然是不科学的,也不便于维护。

(2)ddt可与表格一起使用,从表格读取出批量的测试数据,作为参数依次传入

3.案例

测试系统登录功能,使用ddt模块读取测试数据,测试数据存放在excel维护,实现登录方法、测试登录脚本以及测试数据分离

二、代码

152717754_2_20190124120117958

common中的HTMLReport.py和read_excel.py为测试报告封装和表格读取数据

1.common.login_api.py

测试登录方法(返回登录结果中的msg信息,用于测试断言)

# coding:utf-8

import requests

class Login():

def __init__(self):

self.s = requests.session()

self.headers = {

"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",

"Origin":"http://192.168.1.9:8080"

}

self.login_url = "http://192.168.1.9:8080/SSOAuth?action=login&code=undefined&gotoURL=http://192.168.1.9:8080/portal/geoindex.do"

def login(self, userAccount, pwd):

data = {"userAccount": userAccount, "pwd": pwd}

body = {

"data":'%s'�ta

}

r1 = self.s.post(self.login_url,headers=self.headers,data=body,verify=False)

return r1.json()["msg"] # 返回msg信息,测试脚本断言

if __name__ == '__main__':

l = Login()

l.login("suner", "123456")

2.case.test_login_api.py

测试登录脚本

# coding:utf-8

import os

import ddt

import unittest

from common.login_api import Login

from common.read_excel import ExcelUtil

cur_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) # 返回当前文件的上上层目录

excel_path = os.path.join(cur_path , "test_data/login_data.xlsx") # 测试数据login_data.xlsx文件路径

# 调用封装好的读取表格方法,取出表格中的数据

instance_excel = ExcelUtil(excel_path , "Sheet1")

da = instance_excel.dict_data()

# print(da)

@ddt.ddt

class TestLogin(unittest.TestCase):

def setUp(self):

self.lo = Login()

@ddt.data(*da)

def test_login(self, data): # {0}是在最终的测试报告中依次打印中测试数据

"""测试数据:{0}"""

userAccount = data["userAccount"]

pwd = data["pwd"]

exp = data["exp"]

res = self.lo.login(userAccount, pwd)

self.assertEqual(exp, res)

if __name__ == '__main__':

unittest.main()

3.run_main.py 执行测试

import unittest

import os

import time

from common.HTMLReport import HTMLTestRunner

# 当前脚本所在文件真实路径

cur_path = os.path.dirname(os.path.realpath(__file__))

def add_case(caseName="case", rule="test_*.py"):

"""第一步:加载所有测试用例"""

case_path = os.path.join(cur_path, caseName) # 用例文件夹

# 文件夹不存在就创建一个文件夹

if not os.path.exists(case_path): os.mkdir(case_path)

# 定义discover加载所有测试用例

# case_path:执行用例的目录;pattern:匹配脚本名称的规则;top_level_dir:默认为None

discover = unittest.defaultTestLoader.discover(case_path, pattern=rule, top_level_dir=None)

return discover

def run_case(all_case, reportName="report"):

"""第二步:执行所有的用例,并把结果写入到html测试报告中"""

now = time.strftime("%Y_%m_%d_%H_%M_%S")

report_path = os.path.join(cur_path, reportName)

if not os.path.exists(report_path): os.mkdir(report_path)

report_abspath = os.path.join(report_path, now "result.html")

print("report path:%s" % report_abspath)

fp = open(report_abspath, "wb")

runner = HTMLTestRunner(stream=fp, title="自动化测试报告,测试结果如下:",

description="用例执行情况")

# 调用add_case函数

runner.run(all_case)

fp.close()

def get_report_file(report_path):

"""第三步:获取最新的测试报告"""

lists = os.listdir(report_path)

lists.sort(key=lambda fn: os.path.getmtime(os.path.join(report_path, fn)))

print("最新测试生成的报告:" lists[-1])

# 找到生成最新的报告文件

report_file = os.path.join(report_path, lists[-1])

return report_file

if __name__ == '__main__':

all_case = add_case() # 加载用例

run_case(all_case) # 执行用例

report_path = os.path.join(cur_path, "report")

report_file = get_report_file(report_path) # 生成报告

三、结果

1.控制台运行结果

152717754_3_20190124120118302

2.测试报告

152717754_4_20190124120118630

来源:http://www.icode9.com/content-1-104301.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值