码迷,mamicode.com
首页 > 编程语言 > 详细

python+requests接口自动化测试4--参数化

时间:2021-06-22 18:32:26      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:字段   ram   pat   ase   转化   冲突   ati   path   port   

在自动化测试中,一个测试用例对应一个测试点,通常一组测试数据无法完全覆盖测试范围,所以,需要参数化来传递多组数据。

将每个用例及对应需要输入的参数都保存在excel表的每一行里,执行用例时循环取出每组数据就可以了。

 测试用例如下:

技术图片

 

 operation_excel.py

import xlrd
from xlwt import *
import json
import os
from xlutils.copy import copy
import openpyxl
import re


class ReadExcel(object):
    def __init__(self, filepath, sheetname):
        self.filepath = filepath
        self.sheetname = sheetname
        # 打开excel并创建对象存储
        self.data = xlrd.open_workbook(self.filepath)
        # 根据工作表的名称获取工作表中的内容
        self.table = self.data.sheet_by_name(self.sheetname)
        # 获取工作表第一行的所有字段列表
        self.keys = self.table.row_values(0)
        # 获取工作表的有效行数
        self.rownum = self.table.nrows
        # 获取工作表的有效列数
        self.colnum = self.table.ncols

    def read(self, module):
        liens = []
        colData = self.table.col_values(2, 1, self.rownum)  # 取一列 数据

        for row in range(1, self.rownum):
            if module == colData[row - 1]:
                liens.append(row)  

        datas = []
        for i in range(0, len(liens)): 
            sheet_data = {}
            for j in range(self.colnum): 
                c_type = self.table.cell(liens[i], j).ctype
                c_cell = self.table.cell_value(liens[i], j)  # 单元格的值
                if c_type == 2 and c_cell % 1 == 0: 
                    c_cell = int(c_cell)
                sheet_data[self.keys[j]] = c_cell
            datas.append(sheet_data)
        return datas

test_login.py

class Test_Login(object):
    rdexcel = ReadExcel(r"D:\Python37\Workspace\IndustryApi_Test\test_data\test_data.xlsx", "login")
    dic_data_login = rdexcel.read("登录")

    def setup_class(self):
        self.com = Comm()
        self.gh = GetHeader()
@pytest.mark.parametrize(data, dic_data_login)
   def test_login(self, data): currentRow = data[id] br = BaseRequest(data["requestType"], data[uri]) dict_header = json.loads(data[header]) header = self.gh.get_header(data[method], data[params], "", br.key) dict_header.update(header) result = br.sureMethod(data[method], dict_header, data[params])      assert data[success] == str(result.json()[success]) assert data[exp] == result.json()[msg]

运行:

技术图片

 

 至此,登录部分11条测试用例全部执行结束。特别注意的是,excel中的header和params已经写成了json格式,但实际从excel中取出数据时字符串格式,需要用json.loads()转化一下才能使用。

 

以上实现了数据的自动读取功能,为了更方便的知道测试用例是否执行通过,可以加入写结果到excel的功能,执行用例执行后,直接将结果写入到对应的单元格:

class WriteExcel(object):
    def __init__(self, filepath, sheetname, newpath):
        self.filepath = filepath
        self.sheetname = sheetname
        self.newpath = newpath

        wb = xlrd.open_workbook(self.filepath)  # 打开excel文件

        self.rows = wb.sheet_by_name(self.sheetname).nrows  # 获取已有的行数
        self.excel = copy(wb)  # 复制原文件
        self.worksheet = self.excel.get_sheet(self.sheetname)  # 获取要操作的sheet

    def write(self, row, col, result):
        self.worksheet.write(row, col, result)  
        self.excel.save(self.newpath)

上述写数据方法与读数据方法一开始是分为两个类写的(不需要),所以出现了以下情况:

1.当WriteExcel类中的filepath与newpath相同时,会出现读写冲突,其他测试用例文件找不到test_data.xlsx;

2.当WriteExcel类中的filepath与newpath不同时,后面测试用例的数据会将前面测试用例的数据覆盖掉,最终只保存最后一个执行的用例文件的结果数据。

 

python+requests接口自动化测试4--参数化

标签:字段   ram   pat   ase   转化   冲突   ati   path   port   

原文地址:https://www.cnblogs.com/nailao/p/14902979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!