python+unittest+excel接口自动化_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*******

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值