• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

接口自动化(四):框架搭建(Python)

python 芳草乀 1718次浏览 0个评论

今天更新最后一篇接口自动化的内容:框架搭建,建议大家提前了解unittest框架

框架目录结构

框架分为五部分(配置、测试数据文件、测试脚本、启动主函数、报告)
接口自动化(四):框架搭建(Python)

配置层:

配置文件为csv格式,给大家看下样式:接口自动化(四):框架搭建(Python)主要包括脚本路径,脚本名称,测试是否执行和执行顺序

数据层:

数据文件也是csv文件格式,主要存放的是接口所需要的数据,这里我只有一个接口用到了数据文件,给大家看下什么样子:
接口自动化(四):框架搭建(Python)

第一列:请求url
第二列:预期结果(第一个没有预期结果,因为我测试的是更新信息接口,依赖登录,所以我登录成功就行了,没有做断言)
第三列:请求的参数个数
第四列及以后:参数名称及参数值
该文件放在testdatafile目录下的ind_interface

测试脚本:

测试脚本,和我前几期讲的差不多,就是发请求,断言,不过这里有个新东西和大家说下,就是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)
                #这里断言:判断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()

报告层:

生成的报告会直接在这个目录下面:
报告样式:
接口自动化(四):框架搭建(Python)两个测试脚本,两个测试报告
自动化测试差不多就到这里结束了,欢迎大家多多留言,下一期我们讲性能测试了啦


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明接口自动化(四):框架搭建(Python)
喜欢 (0)

您必须 登录 才能发表评论!

加载中……