013 python接口 数据驱动ddt
''' 时间:2018/11/05 目录: 一: 安装ddt 二: 禅道登录 1 工程结构 2 unittest文件 3 实现功能文件 4 执行结果 三: 使用excel 1 安装xlrd 2 准备测试数据 四: 禅道登录
1 工程结构 2 unittest文件 3 实现功能文件
4 read_excel.py 5 执行结果 '''
一: 安装ddt
1 : 运行输入"cmd",进入Dos窗口。
2 : 输入"pip install ddt"(安装ddt模块)。
1 : 输入"pip list"(查看安装的库)。
2 : 可以看见已经安装了ddt(1.2.0)。
1 : 输入"pip show ddt"(查看ddt的信息)。
二: 禅道登录
1 工程结构
2 unittest文件
# coding:utf-8 import unittest import ddt import requests from DataDriver.chandao_login_api import * data = [{"user": "admin", "psw": "123456", "expect": True}, {"user": "admin2", "psw": "123456", "expect": False}, {"user": "admin", "psw": "123456", "expect": True}, {"user": "admin4", "psw": "123123", "expect": False} ] @ddt.ddt class Test(unittest.TestCase): def setUp(self): self.session = requests.session() def tearDown(self): self.session.cookies.clear() # 清除缓存 - cookies self.session.close() # 去除警告 - 关闭进程 @ddt.data(*data) # *data : 分组传送 - 字典类型 def test_001(self, testData): strUser = testData["user"] strPass = testData["psw"] strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertTrue(bResult == testData["expect"]) if __name__ == '__main__': unittest.main()
3 实现功能文件
# coding:utf-8 import requests url = "http://127.0.0.1/zentao/user-login.htm" # url经常变 : 做全局变量 - 做配置文件 def Login(session, strUser, strPass): ''' 登录禅道 :param session: session :param strUser: 用户名 :param strPass: 密码 :return: 请求结果 - 服务端 ''' body = { "account": strUser, "password": strPass, "keepLogin[]": "on", "referer": "/zentao/my.html" } r = session.post(url, data = body) strResult = r.content.decode("utf-8") return strResult def DecideResult(strResult): ''' 判断结果 - 登录禅道 :param strResult: 请求结果 - 服务端 :return: True - 登录成功 Fasle - 登录失败 ''' if "登录失败" in strResult: print("登录失败") return False elif "parent.location" in strResult: print("登录成功") return True else: print("登录失败 - 其他情况") return False if __name__ == '__main__': s = requests.session() result = Login(s, "admin", "123456") DecideResult(result)
4 执行结果
1 : 测试用例全部运行pass。
1 : 测试用例有failed。
三: 使用excel
1 安装xlrd
1 : 运行输入"cmd",进入Dos窗口。
2 : 输入"pip install xlrd"(安装xlrd模块)。
1 : 输入"pip list"(查看安装的库)。
2 : 可以看见已经安装了xlrd(1.1.0)。
2 准备测试数据
1 : 创建excel文件,命名为testData。
2 : 填写测试数据。
四: 禅道登录
1 工程结构
2 unittest文件
# coding:utf-8 import unittest import ddt import requests from DataDriver.chandao_login_api import * from DataDriver.read_excel import ExcelUtil data = ExcelUtil("testData.xlsx", "Sheet1") data = data.dict_data() print(data) @ddt.ddt class Test(unittest.TestCase): def setUp(self): self.session = requests.session() def tearDown(self): self.session.cookies.clear() # 清除缓存 - cookies self.session.close() # 去除警告 - 关闭进程 @ddt.data(*data) # *data : 分组传送 - 字典类型 def test_001(self, testData): strUser = testData["user"] strPass = testData["psw"] strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertTrue(str(bResult) == testData["expect"]) if __name__ == '__main__': unittest.main()
3 实现功能文件
# coding:utf-8 import requests url = "http://127.0.0.1/zentao/user-login.htm" # url经常变 : 做全局变量 - 做配置文件 def Login(session, strUser, strPass): ''' 登录禅道 :param session: session :param strUser: 用户名 :param strPass: 密码 :return: 请求结果 - 服务端 ''' body = { "account": strUser, "password": strPass, "keepLogin[]": "on", "referer": "/zentao/my.html" } r = session.post(url, data = body) strResult = r.content.decode("utf-8") return strResult def DecideResult(strResult): ''' 判断结果 - 登录禅道 :param strResult: 请求结果 - 服务端 :return: ''' if "登录失败" in strResult: print("登录失败") return False elif "parent.location" in strResult: print("登录成功") return True else: print("登录失败 - 其他情况") return False if __name__ == '__main__': s = requests.session() result = Login(s, "admin", "123456") DecideResult(result)
4 read_excel.py
# coding:utf-8 import xlrd class ExcelUtil(): def __init__(self, excelPath, sheetName="Sheet1"): self.data = xlrd.open_workbook(excelPath) self.table = self.data.sheet_by_name(sheetName) # 获取第一行作为key值 self.keys = self.table.row_values(0) # 获取总行数 self.rowNum = self.table.nrows # 获取总列数 self.colNum = self.table.ncols def dict_data(self): if self.rowNum <= 1: print("总行数小于1") else: r = [] j=1 for i in range(self.rowNum-1): s = {} # 从第二行取对应values值 values = self.table.row_values(j) for x in range(self.colNum): s[self.keys[x]] = values[x] r.append(s) j+=1 return r if __name__ == "__main__": filepath = "testData.xlsx" sheetName = "Sheet1" data = ExcelUtil(filepath, sheetName) print(data.dict_data())
5 执行结果
1 : 测试用例全部运行pass。
1 : 测试用例有failed。