接口自动化+接口测试基础2

前言:最近测试报告里面一直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="http://39.107.102.34:8080/jd/"
    #生产环境
    #JD_SERVLET="http://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)

            pass

send.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'图片上传成功')
        pass











show.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'])

        pass
















suit包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)

就这些。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值