代码编织梦想

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()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/luoluoxx0115/article/details/111093341

python-CSVfeedSpider 提取csv文件数据-爱代码爱编程

从贵州省数据开放平台下载科技特派员csv文件,文件地址为http://gzopen.oss-cn-guizhou-a.aliyuncs.com/科技特派员.csv 使用命令创建项目>>>scrapy startproject csvfeedspider 进入项目目录>>>cd csvfeedspider >&

python格式化输出的三种方式-爱代码爱编程

方式一:字符串拼接 host=input("please input your host:") hostname=input("please input your hostname:") ip=input("please input your ip:") ns=input("please input your ns:") hotel=''

php laravel 控制器controller 调用 python 的一些问题-爱代码爱编程

最近有个项目要用php 调用python 来执行一些实时采集功能 以前这个项目是稳定运行的,时隔半年后,对方数据源 over 掉了要换数据源。 结果换完后,死活不执行了。 debug 一天一夜后,linux 上命令行执行妥妥的。。。。。 写进 controller ?oh shit! 能看到返回 串,却看不到结果?? 都快整哭我了,后面沉着一口气,决定

Sklearn机器学习(1)——fit,transform和fit_transform的区别-爱代码爱编程

引言 fit和transform没有任何关系,仅仅是数据处理的两个不同环节,之所以出来fit_transform这个函数名,仅仅是为了写代码方便,会高效一点。sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用各种API方法,transform只是其中一个API方法,所以当你调用transf

机器学习实战第2版 00 python虚拟环境在Ubuntu/win(anaconda&virtualenv)系统下的配置-爱代码爱编程

python 虚拟环境配置 虚拟环境的作用关于本帖虚拟环境的配置Ubuntu1 `安装`虚拟环境的命令2 `创建`虚拟环境的命令3 `使用`虚拟环境的命令4 后台使用jupyter notebookWindows cmd/anaconda1 Win在cmd下使用 virtualenv2 Win下使用anacondaanaconda常规操作anaco

python遗传算法求解一元一次函数极值-爱代码爱编程

#初始化种群 from random import * import copy import random def population(N,L): ls=[] while len(ls)<N: ls.append([random.randint(0,1) for i in range(20)]) retur

SQL:多表查询语句(嵌套子查询,多表连接)操作实例-爱代码爱编程

一、SQL Server多表查询,包括连接操作和嵌套子查询 背景知识: 一、连接:分成内连接和外连接,内连接相当于取交集,外连接相当于取并集 二、嵌套子查询:连接操作浪费资源,使用嵌套子查询可以避免连接同时加快执行速度,分成相关子查询和非相关子查询 名称解释(不区分大小写) student学生表: 包含属性列:sno学号、sname学

SQL:简单查询语句操作实例-爱代码爱编程

一、SQL Server简单查询语句 背景知识: 一、查询:SQL中最基本、最常用的操作,用来对数据库进行查询 二、表达式: select 属性列 from 表 where 筛选条件 group by 分组属性列 having 分组后筛选条件 orser by 排序 名称解释(不区分大小写) student学生表: 包含属性列:sno

使用 DML语句,对 “锦图网” 数据进行操作,连接查询(内连接,左外连接,右外连接,全连接)-爱代码爱编程

查看本章节 查看作业目录 需求说明: 对 “锦图网” 数据进行操作: 统计每一种线路类型的线路数量、最高线路价格、最低线路价格和平均线路价格,要求按照线路数量和平均线路价格升序显示。统计每种类型线路的订购数量和平均价格,要求按线路数量和平均线路价格升序显示查询指定客户(如“郝琼琼”)所预订的所有线路信息,要求显示下单客户姓名、出行客户姓名、订单号、

国产达梦数据库8 jdbc maven包,使用官方提供的包制作,方便大家使用-爱代码爱编程

dameng-maven 国产达梦数据库8 dm8 jdbc Maven包,使用官方提供的包制作,方便大家使用 下载地址: Gitee dameng-maven 使用说明 Maven<dependency> <groupId>dm</groupId> <artifactId>dm-con

MySQL高级查询与编程笔记 • 【第3章 子查询】-爱代码爱编程

全部章节   >>>> 本章目录 3.1 子查询定义和单行子查询 3.1.1 子查询定义 3.1.2 单行子查询应用 3.1.4 实践练习 3.2 多行子查询应用 3.2.1 in 比较符 3.2.3 any|some 关键字子查询 3.2.4 实践练习 3.3 子查询特殊应用 3.3.1 from 子句中的子

jdbc复习-爱代码爱编程

今天又maven写了一下jdbc复习。 结果发现,怎么都运行不成功。 就在我一遍又一遍的找错之后,发现,竟然没导包,没添加依赖!!!! 共勉,一定要细心。 可能是因为,间隔时间长了,所以一开始也没注意,然后,一直不知道哪里错了。 现在上干货。 首先打开数据库,创建数据库db4. 在数据库中创建student表。 id,name,age,birth