python接口自动化-连接数据库

我们做测试的时候经常会去数据库取数据,这样能够保证数据有差异性,而且准确,那么怎么去数据库取数据,并且应用到接口里呢,我今天就来讲解一下

1、需求

加入购物车:我们加入购物车的商品必须是库里存在且上架的,我们每次加入购物车的商品不同,才能判断加入购物车功能是否可用

2、接口

在这里插入图片描述

3、代码

首先创建一个py文件,用来连接数据库,我这里创建了个conf.py

# -*- coding: utf-8 -*-
import pymysql   #python连接mysql的驱动程序,需要用pip安装

#连接数据库
hostname = '192.168.*.*'   #被连接的数据库服务器地址
username = 'root'   #数据库账号
password = '123456'   #账号密码
dab = 'student'   #要连接的具体库名
conn = pymysql.connect(host=hostname, user=username, password=password, db=dab, charset='utf8')
cur = conn.cursor()

上边这段代码是用来连接数据库的,接下来我们从数据库取数据,创建一个py文件,名称为db_sql.py

import sys
sys.path.append('../')
from conf import *   #把数据库连接语句导进来,也就是conf.py的内容加进来

class Sql_select(object):
	def sql_addshopping(self): 
		conn.ping(reconnect=True)  #这句的作用非常关键,是在每次取数据之前,先判断数据库是不是连接状态,如果未连接,则重连
		self.sql1 = '这里是你的sql语句'
		cur.execute(self.sql1)  #执行sql
		self.conid = cur.fetchone() #fetchone取1条,fetchall()取全部,运行完成以后,取出来的其实是一个元组,但是传参的时候,参数要求是字符串,所以需要处理一下,这就是下边这句的作用了
		self.sql = ''.join(self.conid[0])  #去掉元组中的小括号
		conn.close()  #关闭连接
		return (self.sql)  

if __name__ == '__main__':
	print (Sql_select().sql_addshopping())

根据上边的代码,取出来的结果如下:
在这里插入图片描述
为什么取isbn呢,因为上边的接口里要求了,传的参数必须是isbn,所以,我这里取出来的就是isbn,具体取什么数据,需要看接口的要求。
最后再创建一个测试文件,名称为:shopping_api.py,在这个文件里边,我们把从数据库取出来的数据用上

import unittest
import requests
import json
import sys
sys.path.append('../') 
import io 
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') 
from db_sql import *   #导入取数据文件

class Test_Apicase(unittest.TestCase):
	def setUp(self):
		self.url = 'http://*****/login'
		self.param = {
					  'loginName' : '15333333333',   #登录账号
					  'loginPwd' : '123456'   #密码
					 }
		self.res = requests.post(self.url,params=self.param)
		self.r = self.res.headers
		self.token = self.r['api-token']  #这里是登录,因为加入购物车动作是针对某一个用户做的,所以得先登录

	def test_10add_shop(self):
		'''add_shopping'''   #用例名
		self.isbn = Sql_select().sql_addshopping()   #这里是从数据库取数据
		self.url = 'http://*****/shoppingCart/add'
		self.header = {
						'api-token' : self.token
					  }
		self.param = {
						'isbn' : self.isbn    #把从数据库取出来的数据放在这里当参数
					 }
		self.res = requests.post(self.url,headers=self.header,params=self.param)
		self.r = self.res.json()
		print ('登录的账号是:%s\n密码是:%s' % ('15333333333','123456'))
		print ('加入购物车的isbn是:%s\n返回值是:%s\n' % (self.isbn,self.r))   #这两个打印是为了有bug的时候有依据,建议大家打印出来,方便手动确认bug
		self.assertEqual(200,self.r.get('code'))   #断言

	def tearDown(self):
		pass

if __name__=='__main__':
	suite = unittest.TestSuite()
	suite.addTest(Test_Apicase('test_10add_shop'))
	runner = unittest.TextTestRunner(verbosity=2)
	runner.run(suite)

运行结果如下:
在这里插入图片描述

这样的返回值就非常清晰,如果有了bug,直接用打印出来的这些数据返测,一目了然,并且批量运行用例时,这些数据也会出现在测试报告上,非常方便。前边几篇已经介绍过测试报告了,这里就不批量运行了,一样一样的。

可能有小伙伴会问,为什么不把数据库连接和取数据放在一个文件里,因为有可能会有很多个需要从数据库取数据的接口,所以另写一个文件会更清晰,我也建议大家尽量把数据文件,配置文件,接口文件,测试文件,批量运行文件,日志文件分开,这样复用性会好一些。

今天的分享就到这里,如果对您有帮助的话,记得点赞加关注哦,有问题的小伙伴,评论见!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值