Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3576888
  • 博文数量: 365
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2522
  • 用 户 组: 普通用户
  • 注册时间: 2019-10-28 13:40
文章分类

全部博文(365)

文章存档

2023年(8)

2022年(130)

2021年(155)

2020年(50)

2019年(22)

我的朋友

分类: Python/Ruby

2021-03-30 17:03:56

测试脚本:

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

      #ncsv行数

        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()

阅读(1620) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~