接口自动化测试,使用Python的pymysql模块连接数据库,实现增删改查操作

1、需求场景

接口自动化测试中,需要测试A接口,该接口是获取当前图片的相关图片数据,匹配规则是:相关图片至少有4个指定标签组下的标签,需与主图片(当前图片)的标签相同。
手工测试的步骤是:
1、先到数据库resources_attrs表查询主图片关联的标签属性是哪些:结果1
2、请求相关图片接口,获取到该接口返回的相关图片ID
3、拿相关图片ID,去数据库resources_attrs表查询其的标签属性是哪些:结果2
4、比对结果1和结果2,如果有4个或4个以上标签属性相同,则测试通过
问题来了:该接口返回的数据是瀑布流展示,会返回很多数据,如果是手工测试,拿相关图片ID一个一个的去数据库查询再比对,无疑是重复且费时的,而且做接口自动化时,也需要去断言A接口返回相关图片是否符合匹配规则,显然手工验证是不可能实现的
解决方案:通过Python来测试该接口,然后通过pymysql模块来实现连接数据库查询主图片和相关图片的标签属性,再比对结果进行断言

2、需求实现

import pymysql
import unittest
import requests

# 连接数据库
db = pymysql.connect(host='127.0.0.1',
                     port=3306,
                     user='root',
                     passwd='123456',
                     db='dbname')
cur = db.cursor()
# 查询数据库的resources_attrs表中主图片关联的标签属性
# 定义变量:主图片的id,需要匹配的标签组 的 id
rid,gid1,gid2,gid3,gid4 = 43658600,63,134,152,153
cur.execute (
    "SELECT tag_id FROM `resources_attrs` WHERE resource_id = {} AND group_id in({},{},{},{})".format(rid,gid1,gid2,gid3,gid4))
zhutu_attrs = cur.fetchall()
zhutu_attrs_list = []
for item in zhutu_attrs:
    zhutu_attrs_list.append(item)
print('主图片{}的标签属性是:{}'.format(rid, zhutu_attrs_list))

class WebDataTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print('测试初始化')
        # 登录获取token
        cls.url = 'http://xxxx.com'
        from_data = {'username':'134xxxxxxxx','password':'xxxxxx'}
        r = requests.post(cls.url+'/api/login',data=from_data)
        response = r.json()
        token = 'Bearer '+response['data']
        '''设置全局变量'''
        global headers
        headers = {'Authorization': str(token)}     # token
        
    @classmethod
    def tearDownClass(cls):
        cur.close()
        db.close()
        print('\n测试结束')
        print('数据库连接已关闭')
        
    def test_001_assocPictures(self):
        '''测试相关图片是否与主图片标签匹配'''
        params_data = {'resource_id':rid,'page':1,'limit':100}
        r = requests.get(self.url+'/api/picture/assoc-pictures',params=params_data,headers=headers)
        response = r.json()
        data_list = response['data']['data']
        ids = [item.get('id') for item in data_list]
        # ids = [43747900]
        print('接口返回的相关图片id是{}'.format(ids))
        for id in ids:
            # 查询数据库的resources_attrs表中相关图片关联的标签属性
            cur.execute(
                "SELECT tag_id FROM `resources_attrs` WHERE resource_id = {} AND group_id in({},{},{},{})".format(id,gid1,gid2,gid3,gid4))
            xiangguan_attrs = cur.fetchall()
            xiangguan_attrs_list = []
            nFindCount = 0
            string = str(zhutu_attrs_list)
            for item in xiangguan_attrs:
                xiangguan_attrs_list.append(item)
                if str(item[0]) in string:
                    nFindCount = nFindCount+1
            print('相关图片{}关联的标签是:{}'.format(id, xiangguan_attrs_list))
            # 断言:相关图片的标签与主图片的标签至少有4个或4个以上相同
            # self.assertTrue(nFindCount >= 4,msg='相关图片{}的标签与主图片{}的标签不匹配'.format(id,rid))
            self.assertGreaterEqual(nFindCount,4,msg='相关图片{}的标签与主图片{}的标签不匹配'.format(id,rid))

if __name__ == '__main__':
    unittest.main()
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值