测试脚本:
测试脚本,和我前几期讲的差不多,就是发请求,断言,不过这里有个新东西和大家说下,就是sessionID 问题,因为实际工作中有好多请求就是依赖这些东西,我这里是更新用户信息,需要用户登录返回来的 sessionID ,直接上代码:
import os
from HTMLTestRunner import HTMLTestRunner
import requests
import unittest
import csv
class test_updateuser_v3(unittest.TestCase):
#unittest 框架中 setUp 方法是在每个测试 case 前都执行一遍
def setUp(self):
# 获取当前路径,如果路径混乱时,大家可以 print 打印去调试
path = os.getcwd()
# 一个点上一级 两个点上上一级
p1 = os.path.abspath(os.path.dirname(path) + os.path.sep + ".")
self.fpath = p1 + "\\testdatafile\ind_interface\\test_updateuser.csv"
print(self.fpath)
self.file = open(self.fpath, 'r')
table = csv.reader(self.file)
userinfo = {}
拿到登录的用户名和登录密码,所以这里参数写死掉了
for row in table:
url = row[0]
userinfo[row[3]] = row[4]
userinfo[row[5]] = row[6]
break
response = requests.post(url, data=userinfo)
# 拿到登录返回来的 jsessionid
self.sessionID = dict(response.cookies)['JSESSIONID']
self.file.close()
# 更新用户信息, unittest 框架中测试方法必须以 test 开头
def test_03(self):
self.file2 = open(self.fpath, 'r')
# 这里为什么是 num=0 呢,是因为文件的第一行是登录请求 url, 所以我第一行要跳过,下面做判断用
num = 0
table = csv.reader(self.file2)
for row in table:
userinfo = {}
# 第一行就跳过了
num = num + 1
if num > 1:
# 拿到 url
url = row[0]
# 拿到参数个数,类似我前几篇方法一样,我就不一一解释了
j = int(row[2])
expresult = row[1]
for i in range(3, 2 * j + 3, 2):
userinfo[row[i]] = row[i + 1]
# print(userinfo)
session = {'JSESSIONID': self.sessionID}
# 这里多了 cookies 参数,请注意
response = requests.post(url, data=userinfo, cookies=session).text
print(response)
# 这里断言:外汇跟单gendan5.com判断 response 里面是否有更新个人信息成功字段,比 if 简单多了
self.assertIn(" 更新个人信息成功 ", response)
self.file2.close()
该脚本放在script 目录下面的 ind_interface
启动主函数
主要记录了怎么去按照配置文件里面的标识去执行脚本:
import csv
import operator
import os
import unittest
# 这里用 HTMLTestRunner 生成报告,需要把该 python 文件放到项目目录下面
from HTMLTestRunner import HTMLTestRunner
if __name__ == '__main__':
path = os.getcwd()
p2 = os.path.abspath(os.path.dirname(path) + os.path.sep + ".")
# 报告名字
filename = p2 + "\\testresultfile\ind_interface\\test_updatauser_report.html"
# 以二进制写报告
report=open(filename,'wb')
file = open('D:\Learn\\automation\interfaceframework\config\config.csv', 'r')
# 下面注释的两行是获取配置文件里一共多少行
# line=len(open('D:\Learn\\automation\interfaceframework\config\config.csv').readlines())
# print(line)
table = csv.reader(file)
lis = []
n = 0
dic = {}
for row in table:
# 跳过第一行
if n > 0:
dic = {}
# 拿到测试脚本路径,测试脚本名称
dic[row[1]] = row[0]
# 拿到测试顺序
dic['num'] = row[3]
# 拿到测试状态:即是否执行
dic['state']=row[2]
# print(dic)
if dic != {}:
# 把他们装到列表里面
lis.append(dic)
#n 为 csv 行数
n = n + 1
# 这里是把列表按照 num 排序
dicn = sorted(lis, key=operator.itemgetter('num'))
# 给大家看下 dicn 结果排序内容:
#[{'test_updateuser_v2.py': 'D:\\Learn\\automation\\interfaceframework\\script\\ind_interface', 'num': '1', 'state': 'YES'}, {'test_updateuser_v3.py': 'D:\\Learn\\automation\\interfaceframework\\script\\ind_interface', 'num': '2', 'state': 'YES'}]
# print(dicn)
# 相当于循环配置文件了
for i in range(0, n - 1):
m = 0
# 拿到字典里的值
for content in dicn[i].items():
if m == 0:
# 拿到测试文件名,测试文件路径
fname = content[0]
fpath = content[1]
print(fname, fpath)
if m==2:
state=content[1]
# 判断是否执行该脚本
if state=='YES':
# 加载测试 case
discover = unittest.defaultTestLoader.discover(fpath, pattern=fname)
runner = HTMLTestRunner(stream=report, title=" 测试报告 ", description=" 更新接口 ")
# 执行加载的测试案例
runner.run(discover)
m = m + 1
report.close()