python实践报告总结_Pytest:接口测试实践总结

环境

Python 3

Requests

Pytest

注意版本匹配问题

思路

市场上现有的开源工具以及一些开源平台,并不能完全满足当前业务需求

符合业务的平台

灵活的扩展性以及实用性

两种方式展示共用数据源

思路.png

实现

common 通用功能,读取config、写log、生成报告、数据库连接、发送邮件等

config 配置文件,项目相关的配置文件,均放在此处,实现配置与代码的分离

libarry 核心库 如封装的requets方法

testcase 测试用例 测试套件

log 日志存放处

report 测试报告存放处

run.py 程序入口

目录结构.png

问题

【问题】:数据库读取数,通过一个方法进行实现

结果描述:因为使用的pytest的测试报告,实际结果是10个接口都在一个测试方法中执行,这与预期的一个接口对应一个方法不符

def test_insurance_interface(self, login, db):

results = db

print(db)

print("============================")

if len(results['data']) != 0 and results['code'] == '0000':

for temp_case_interface in results['data']:

print(temp_case_interface)

url_interface = baseurl + str(temp_case_interface['detail'])

querystring = temp_case_interface['param']

headers = {'Cookie': login}

type_interface = temp_case_interface['type_interface']

result = respons.http_request(interface_url=url_interface, interface_param=querystring,headerdata=headers,

request_type = type_interface)

print(result)

print("<<<<<<<<<<<<<<<<<<<<<

首次解决思路:

a.获取类方法列表A

b.获取数据库中的方法

c.判断方法a是否在列表A中

d,在就执行该方法

获取类方法列表

def get_test_api_methods(self):

return list(filter(lambda x: x.startswith('test_api') and callable(getattr(self, x)), dir(self)))

【引申出来的问题】:

我实际调用的时候是在数据库方法中,进行判断接口是否在类方法列表中,这样就出现了如何匹配类方法的问题

调整思路,在类方法中通过传参的方式调用数据库方法,获取对应的接口数据

获取数据库接口

def get_api_from_db(params):

api_params = conn.select_one("SELECT * FROM `interface_detaill` WHERE detail = '%s'" % (params))

return api_params

类方法中调用

def test_api(self):

apiprams = get_api_from_db('/api/')

if apiprams['data'] == None:

try:

sys.exit(0)

except:

print('数据库中无此接口')

else:

url_interface = baseurl + str(apiprams['data']['detail'])

querystring = apiprams['data']['param']

headers = {'Cookie': login()}

type_interface = apiprams['data']['type_interface']

result = respons.http_request(interface_url=url_interface, interface_param=querystring, headerdata=headers,

request_type=type_interface)

print(result)

assert '0000' == result['code']

这样就保证test_api 运行的是api这个接口。

【再次引申出来的问题:】一个接口对应的是多条用例,这种情况如何解决呢?

在使用pytest的情况下貌似一个接口一条用例是最好的,实际情况不是这样的。

【解决思路】

pytest.fixture进行参数化(参考链接乐大爷的文章)

pytest.mark.parametrize方式(还有其他方法,未展示)

@pytest.mark.parametrize('roleId',is_roleId)

def test_api_role_set(self,roleId):

apiprams = get_api_from_db('/api/role/set')

if apiprams['data'] == None:

try:

sys.exit(0)

except:

print('数据库中无此接口')

else:

url_interface = baseurl + str(apiprams['data']['detail']) + "?platform=mp"

querystring = apiprams['data']['param']

print(type(querystring))

newdata = json.loads(querystring)

newdata['roleId'] = roleId

print(newdata)

paramdata = json.dumps(newdata)

print(paramdata)

headers = {'Content-Type': 'application/json', 'Cookie': login()}

type_interface = apiprams['data']['type_interface']

result = respons.http_request(interface_url=url_interface, interface_param=paramdata, headerdata=headers,

request_type=type_interface)

print(result)

assert '0000' == result['code']

a.参数值的可变,此时测试数据还是固定的,后续需要考虑断言、参数值自动生成或者通过其他接口获取一些必要参数值

b.维护用例得最小集合或者说最优接口用例集合

c.页面改造

d.实现代码优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值