zoukankan      html  css  js  c++  java
  • python+ddt+unittest+excel+request实现接口自动化

    接口自动化测试流程:需求分析-用例设计--脚本开发--测试执行--结果分析
    1.获取接口文档,根据文档获取请求方式,传输协议,请求参数,响应参数,判断测试是否通过设计用例
    2.脚本开发:使用requests模块进行接口调用
      request内容包含什么?
    ① 封装了各种请求类型,get、post 等;
    ② 以关键字参数的方式,封装了各种请求参数,params、data、headers、token 等;
    ③ 封装了响应内容,status_code、json()、cookies、url 等;
    ④ session 会话对象,可以跨请求。
    3.使用unitest执行测试,编写断言进行结果校验
    4.发送邮件报告
    5.结合测试报告进行结果分析

    数据校验(方便维护)
    1.连接数据库,操作数据库
    2.testsql.py 写查询sql,数据校验(断言sql查询与api返回校验)
    3.testapi测试接口

    关于测试数据总结:
    1.对于全部是独立的接口项目,可以用数据驱动方式,用excel管理测试的接口数据
    2.对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机数生成
    3.对于一个接口有多组测试参数,可以参数化,数据存yaml,text,json、excel都可以
    4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况下,可以放到数据库,每次数据初始化,用完在清理
    5.对于账号密码,邮箱配置的全局参数,可以用命令行参数,写到配置文件
    6.对于少量的静态数据,比如一个接口的测试数据,可以写到py文件的开头

    封装读取excel,返回字典
    import xlrd
    from conf import *
    class ExcelUtil():

    '''从excel中获取测试用例,输出结果为[{列名1:第一列1,列名2:第一列2}, {列名1:第二列1,列名2:第二列2}...]'''
        def __init__(self, excelPath, sheetIndex=0):
    self.data = xlrd.open_workbook(excelPath)
    self.table = self.data.sheet_by_index(sheetIndex)
    # 获取第一行作为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 list(range(self.rowNum-1)):
    s = {}
    # 从第二行取对应values值
    s['rowNum'] = i+2
    values = self.table.row_values(j)
    # print(values)
    for x in list(range(self.colNum)):
    s[self.keys[x]] = values[x]
    r.append(s)
    j += 1
    return r

    if __name__ == "__main__":
    filepath = xlsPath+'/test.xlsx'
    sheetIndex = 0
    data = ExcelUtil(filepath, sheetIndex)
    print(data.dict_data())
    返回结果:
    [{'姓名': 1.0, '年龄': 18.0}, {'姓名': 1.0, '年龄': 20.0}]


    使用ddt数据驱动读取Excel数据
    数据驱动原理:
    1.测试数据为多个字典的list类型 list = [{"a":1},{"b":1}] list = [1,2,3,4]
    2.测试类前加修饰@ddt.ddt
    3.case前加修饰@ddt.data(数据)


    #usr/bin/python
    #encoding:utf-8
    from ddt import ddt, data, unpack
    import unittest
    from debug import ExcelUtil
    from conf import *
    filepath = xlsPath + '/test.xlsx'
    sheetIndex = 0
    s = ExcelUtil(filepath, sheetIndex).dict_data()
    @ddt
    class DoubanTest(unittest.TestCase):
    @classmethod
    def setUp(self):
    print("****Start Test*******")
    @classmethod
    def tearDown(self):
    print("****End Test*******")
    # @data([1, 2, 3, 6])
    # @unpack
    # def test_add(self,testdata1,testdata2,testdata3,exceptdata):
    # sum = testdata1 + testdata2 + testdata3
    # self.assertEqual(sum,exceptdata)
    @data(*s)
    def test_print(self,a):
    print(a)

    if __name__=='__main__':
    unittest.main()
    返回结果:

    ****Start Test*******
    {'rowNum': 2, '姓名': 1.0, '年龄': 18.0}
    ****End Test*******
    ****Start Test*******
    {'rowNum': 3, '姓名': 1.0, '年龄': 20.0}
    ****End Test*******



  • 相关阅读:
    《人类简史》八、融合统一(下)——宗教的法则、历史的混沌
    《今日简史》七、融合统一(中)——帝国的愿景
    《人类简史》六、融合统一(上)——历史的方向、金钱的味道
    《人类简史》五、监狱高墙——想象构建的秩序
    设计模式之职责链模式(Chain of Responsibility)
    设计模式之代理模式(Proxy)
    设计模式之享元模式(FlyWeight)
    设计模式之外观模式(Facade)
    设计模式之装饰模式(Decorator)
    设计模式之组合模式(Composite)
  • 原文地址:https://www.cnblogs.com/zyblb/p/10942106.html
Copyright © 2011-2022 走看看