android及接口测试基础
程序员文章站
2022-04-12 21:12:41
前言:最近测试报告里面一直print打印不出来,最后找了一堆文档终于解决了
print打印的数据主要是跟HtmlTestRunner这个包有关系,我们将原来pycharm自带的H...
前言:最近测试报告里面一直print打印不出来,最后找了一堆文档终于解决了
print打印的数据主要是跟HtmlTestRunner这个包有关系,我们将原来pycharm自带的HtmlTestRunner包先卸载掉,这个包在sitePakages目录下面,换句话说我们在pycharm中引入的所有的包都在这个目录下面,我们将原来的删掉,然后找官网下载一个,直接放进去,然后将这个重新写一下就解决了,乱码问题我们可以参考其他文档,好像有三种方法(一种导入sys,一种在HtmlTestRunner中700多行那里修改我们的编码格式utf-8,还有一种我也没记住,哈哈哈)
正文
在接口测试基础1中我们已经写了一部分的代码,这里我们将完整的代码奉上,可能全部复制也不对,那是因为数据库里的数据和包名之类的不一样,所以我还是提供给你们思路:
util包下dbutil.py
#-*-coding:utf-8-*- #导入数据库包 import MySQLdb #封装 class DBManager(object): #指定主机名字 __host="39.107.102.34" #用户名 __user="root" #密码 __pwd="123456" #数据库 __Database="qiezi" #端口号 __port=3306 #连接数据库的方法 def Connection(self): self.db=MySQLdb.connect(self.__host,self.__user, self.__pwd,self.__Database,self.__port) self.cursor=self.db.cursor() return self.cursor #关闭数据库 def CloseDb(self): self.db.close()urlutil.py
#-*-coding:utf-8-*- class URL(object): #测试环境的基类 JD_SERVLET="https://39.107.102.34:8080/jd/" #生产环境 #JD_SERVLET="https://39.107.102.34:8080/jd/" #登录的接口 JD_LOGIN="login" #请求参数,用户名和密码 JD_LOGIN_PARAMETER={ "username":"zhangsan1", "password":"123456" } #发送朋友圈的接口 JD_SEND="send" #朋友圈展示接口 JD_SHOW="show"创建image包里面放我们要上传的两张图片a.jpg,b.jpg(方便我们写路径)
unit包login.py
#-*- coding:utf-8 -*- #导入单元测试、 import unittest #导入网络请求框架 import requests #支持七种网络请求get post delete head option trace #导入util from util import urlutil,dbutil #声明类继承单元测试 class Login(unittest.TestCase): @classmethod def setUpClass(self): #实例化 self.URL=urlutil.URL() self.db=dbutil.DBManager() pass def setUp(self): pass def tearDown(self): pass def test_us_pw(self): #网络请求 self.login=requests.post(self.URL.JD_SERVLET+self.URL.JD_LOGIN, data=self.URL.JD_LOGIN_PARAMETER) #这一刻返回的是一个对象,我们需要对对象进行json解析 self.login_json=self.login.json() #打印自动化测试报告 # print self.login_json,self.URL.JD_SERVLET+self.URL.JD_LOGIN #获取用户名id和token进行断言 #连接数据库 self.cursor=self.db.Connection() #执行sql语句 sql_login="select userId,username,token from qiezzilogin where username='zhangsan1'" self.cursor.execute(sql_login) #获取对象 self.persons=self.cursor.fetchall() #使用for循环进行遍历 for person in self.persons: userId=person[0] username=person[1] token=person[2] username1=self.login_json['username'] userId1=self.login_json['userId'] tpken1=self.login_json['tpken'] #进行断言 self.assertEqual(username1,username) self.assertEqual(userId1,userId) self.assertEqual(tpken1,token) passsend.py
#-*- coding:utf-8 -*- import unittest #导入网络请求框架 import requests #导入util from util import urlutil,dbutil import os class Send(unittest.TestCase): @classmethod def setUpClass(self): self.db=dbutil.DBManager() self.URL=urlutil.URL() pass def setUp(self): #从数据库将token和id 查询出来 #连接数据库 self.cursor=self.db.Connection() #执行sql语句 sql_login="select userId,username,token from qiezzilogin where username='zhangsan1'" self.cursor.execute(sql_login) #获取对象 self.persons=self.cursor.fetchall() #使用for循环进行遍历 for person in self.persons: #获取userId,username,token self.userId=person[0] self.username=person[1] self.token=person[2] #获取父目录 file_parent=os.path.dirname(os.getcwd()) filename=open(file_parent+"/image/a.jpg",'rb') filename1=open(file_parent+"/image/b.jpg",'rb') #设置文字内容 self.data={ "username":self.userId, "token":self.token, "image":"你好中国啊" } #定义提交参数 self.json={ "image":filename, "image":filename1 } pass def tearDown(self): pass #发送朋友圈功能 def test_send_friend(self): #思路 #1.首先我们链接数据库查找出id 为2的 发送cireid的最大值 #2.我们进行网络请求,发送一条朋友圈 #3.我们再次连接数据库,获取cireid,并且是在userId为2,如果这次获取的cireid,比上次大一, #说明我们发朋友圈成功 接口没问题,同时根据cireid去查询message的内容和我们发送的内容一样 #说明我们发送成功 #4.同时因为我们发送了两张图片,在另一个表里面,所以我们需要去查询那个表,根据cireid,如果返回的数量 #和我们发送的数量一致,说明我们发送朋友圈没有问题 #python的参数函数类型 #1.必备参数:就是我们封装的方法的参数就叫必备参数 #2.关键字参数 printme(str="My string") #3.默认参数,在封装函数的时候,就指定一个默认值 #4.不定长参数 *vartuple(参数名字不定长) self.send_message=requests.post(self.URL.JD_SERVLET+self.URL.JD_SEND, files=self.json,data=self.data) print self.send_message.text #进行json解析 self.send_object=self.send_message.json() #通过sql找出最近id为2上传的内容,而且上传的内容的cireid必须是最大 #打开数据库 self.cursor=self.db.Connection() flush="flush privileges;" self.cursor.execute(flush) #关闭数据库 self.db.CloseDb() #再次打开数据库 self.cursor=self.db.Connection() # # #执行sql语句 sql = "select MAX(cireId) from cirefriend group by userId having userId=2" # sql = "select message from cirefriend group by userId having userId=2" #执行 self.cursor.execute(sql) #获取数据 self.cireids=self.cursor.fetchall() maxid=0 message="" #for循环进行遍历 for cireid in self.cireids: maxid=cireid[0] # message=cireid[1] # print maxid self.assertEqual(self.send_object['statue'],0) #判断链接数据库获取的内容是不是和我们,发送的内容一致,如果一致说明没问题 # self.assertEqual(u"你好中国啊",message) pass # if __name__=="__main__": # unittest.main()cirecle.py
#-*- coding:utf-8 -*- #导入单元测试 import unittest from util import dbutil,urlutil import requests import os class Cirecle(unittest.TestCase): @classmethod def setUpClass(self): #实例化 self.db=dbutil.DBManager() #url类 self.URL=urlutil.URL() pass def setUp(self): #首先我们将登录表的id和token值查询出来 #因为我们发送朋友圈接口 id和token值都是必填参数 #从数据库将token和id查询出来 #连接数据库 self.cursor=self.db.Connection() #执行sql语句 sql_login="select userId,username,token from qiezzilogin where username='zhangsan1'" self.cursor.execute(sql_login) #获取对象 self.persons=self.cursor.fetchall() #使用for循环 for person in self.persons: #获取username userId token self.userId=person[0] self.username=person[1] self.token=person[2] #关闭数据库 self.db.CloseDb() #定义需要提交的服务器json串 self.data={ "username":self.userId, "token":self.token, "image":"我是钢铁侠的爸爸" } #定义文件图片 #获取父类路径 file_parent=os.path.dirname(os.getcwd()) self.files={ "image":open(file_parent+"/image/a.jpg",'rb'), "image":open(file_parent+"/image/b.jpg",'rb') } pass def test_send_image(self): #requests网络请求框架上传图片的三个参数 第一个是url 第二个就是data (提交服务器内容),第三个就是files #图片上传的流 self.send_message=requests.post(url=self.URL.JD_SERVLET+self.URL.JD_SEND, data=self.data,files=self.files) #进行解析 self.send_json=self.send_message.json() print self.send_json #获取动态码 statue=self.send_json['statue'] message=self.send_json['message'] #进行断言 self.assertEqual(statue,0) self.assertEqual(message,u'图片上传成功') passshow.py
#-*- coding:utf-8 -*- import unittest from util import dbutil,urlutil import requests class Show(unittest.TestCase): @classmethod def setUpClass(self): self.db=dbutil.DBManager() self.URL=urlutil.URL() pass def setUp(self): self.cursor=self.db.Connection() sql_login="select userId,username,token from qiezzilogin where username='zhangsan1'" self.cursor.execute(sql_login) self.persons=self.cursor.fetchall() for person in self.persons: self.userId=person[0] self.username=person[1] self.token=person[2] self.db.CloseDb() self.data={ "userId":self.userId, "token":self.token, "page":"1", "conut":"20" } pass def tearDown(self): pass def test_show(self): #请求接口 self.json_show=requests.post(url=self.URL.JD_SERVLET+self.URL.JD_SHOW, data=self.data) print self.json_show.text #进行解析 self.json_result=self.json_show.json() self.cursor=self.db.Connection() #sql语句limit m n 是指隔m条查n条 sql="select cireId,message from cirefriend limit 0,20" #执行sql语句 self.cursor.execute(sql) #获取数据 self.circles=self.cursor.fetchall() #声明list circle_list=[] #for循环 for circle in self.circles: #实例化字典 circle1={} circle1['cireId']=circle[0] circle1['message']=circle[1] circle_list.append(circle1) print circle[0],circle[1] #关闭数据库 self.db.CloseDb() #进行断言 self.assertEqual(len(self.json_result),len(circle_list)) for index in range(0,len(self.json_result)): self.assertEqual(self.json_result[index]['cireId'],circle_list[index]['cireId']) self.assertEqual(self.json_result[index]['message'],circle_list[index]['message']) passsuit包suit.py
#-*-coding:utf-8-*- #导入单元测试 import unittest from unit import login,send,cirecle,show import HTMLTestRunner import os import sys reload(sys) sys.setdefaultencoding('utf-8') #实例化suit suit=unittest.TestSuite() #加入单元测试里面 # suit.addTest(unittest.makeSuite(login.Login)) # suit.addTest(unittest.makeSuite(send.Send)) # suit.addTest(unittest.makeSuite(cirecle.Cirecle)) suit.addTest(unittest.makeSuite(show.Show)) files=os.getcwd()+"/jd.html" filename=open(files,'wb') runner=HTMLTestRunner.HTMLTestRunner(stream=filename,title=u"茄子",description=u"茄子登录接口") runner.run(suit)就这些。。。
推荐阅读
-
Android设备信息生成规则及接口
-
.NET Core 通过XUnit进行接口单元测试(带请求头及参数)
-
requests接口测试的使用—基础篇
-
Android实战基础之入门视图及布局讲解
-
Android学习教程之2D绘图基础及绘制太极图
-
Android Studio教程02-应用程序结构图及应用基础
-
Android开发基础应用(四大组件及Intent)
-
Android入门到精通|安卓/Android开发零基础系列Ⅱ【职坐标】-学习笔记(1)-- 常用控件及资源介绍
-
黑马Android76期学习笔记01基础--day08--start/bind开启服务、电话录音,特别广播接收者,bindService/接口调用服务内方法,混合开启服务,进程间通讯,aidl应用场景
-
解决Android9.0及以后http接口无法访问的问题