python+unitest自动化框架搭建实践过程

python+unitest自动化框架搭建实践过程

写在前面的话
我是LeClaire,一个没有测试理论基础的测试,从接触测试到工作都是野路子,毕业的前两年只会点点点,数据库只会select * from xxx表,语言什么的表示看不懂啊,linux系统操作不会啊。再经历过面试越来越难的经历后,想着学点东西吧,可是不想花钱去报班,咋办,19年6月份到csdn逛了一圈,发现了新大陆,对于一个测试来说,从这里完全可以学到自己所需要的东西,东拼西凑的学回来python的相关自动化,下面就来介绍一下python配合excel配合unitest搭建的接口测试吧。

环境相关

python3.7(其他版本也可以)请到这里(https://blog.csdn.net/weixin_43790276/article/details/89439352)进行学习Windows环境下安装,安装完之后再安装pycharm或者vscode编译器,方便编写代码,我这里用的是vscode,下边看具体的功能。

操作excel进行参数入录。

接口的参数信息非常的接近于python的字典类型:“name”:“value”的形式,简直是一毛一样。所以在经过度娘拼接,这里写了一个从excel导入入参的形式的函数,把sheet的第一行作为字典的name,也就是入参的字段,第二行开始作为字段的值value具体的代码如下:
1,先pip install xlrd这是python操作excel的库

import xlrd
import xdrlib,sys
class ExcelUtil:
    #定义获取excel的方式,excel_path(excel存放的路径),sheet_name,        取哪个工作簿进行参数入参获取
    def __init__(self,excel_path,sheet_name):
        self.data=xlrd.open_workbook(excel_path)
        self.table=self.data.sheet_by_name(sheet_name)
        #获取第一行的值作为keys
        self.keys=self.table.row_values(0)
        #获取表中数据总行数
        self.rowNum = self.table.nrows
        #获取表中数据总列数
        self.colNum = self.table.ncols
    def dict_data(self):
        if self.rowNum<=1:
            print("总行数小于1")
        else:
            r = []
            j = 1
            for i in range(self.rowNum-1):
                s={}
                values = self.table.row_values(j)
                for x in range(self.colNum):
                    s[self.keys[x]] = values[x]
                r.append(s)
                j += 1
            return r
if __name__=="__main__":
    excel_path=''
    sheet_name=''
    data=ExcelUtil(excel_path,sheet_name)

接下来看测试案例的部分

python进行接口测试的方法主要是基于requests的库进行http、https的访问,所以需要导入requests库,安装方法还是通过pip install requests,在python中任何缺少库类的报错都可以通过pip install xx来安装。为了组装测试条件还需要unittest库的支持,请pip install unittest,从之前写的excesl操作函数里边导入Excelutil进行参数输入。测试案例相关的代码如下:

import requests
import unittest
from excel_optest import ExcelUtil
import json
import os, sys
class Generalist(unittest.TestCase):
    #创建对象的方法,setUp,unittest在每个case运行之前运行,这里主要是创建测试的接口,url,这里以我目前的项目为例:
    def setUp(self):
        self.base_url_1="http://10.10.13.211:19188/api/addCouseSub"
       def test_addCouseSub_0(self):
        
        data=ExcelUtil('F:/AutoTestting/TestData/TCcollege.xls','课程订阅').dict_data()[0]
        r=requests.post(self.base_url_1,params=data)
        result=r.json()          
        self.assertEqual(result['code'], '-1')
        self.assertEqual(result['msg'],'订阅传入参数异常,更新失败')
    #couseId为空
    def test_addCouseSub_1(self):
        data=ExcelUtil('F:/AutoTestting/TestData/TCcollege.xls','课程订阅').dict_data()[1]
        r=requests.post(self.base_url_1,params=data)
        result=r.json()    
        self.assertEqual(result['code'], '-1')
        self.assertEqual(result['msg'],'订阅传入参数异常,更新失败')
    #commAccount为空
    def test_addCouseSub_2(self):
        data=ExcelUtil('F:/AutoTestting/TestData/TCcollege.xls','课程订阅').dict_data()[2]
        r=requests.post(self.base_url_1,params=data)
        result=r.json() 
        self.assertEqual(result['code'], '-1')
        self.assertEqual(result['msg'],'订阅传入参数异常,更新失败')
    #参数正确已订阅
    def test_addCouseSub_3(self):
        data=ExcelUtil('F:/AutoTestting/TestData/TCcollege.xls','课程订阅').dict_data()[3]
        r=requests.post(self.base_url_1,params=data)
        result=r.json()
        self.assertEqual(result['code'], '1')
        self.assertEqual(result['msg'],'已经订阅该课程')
    #参数正确订阅成功
    def test_addCouseSub_4(self):
        data=ExcelUtil('F:/AutoTestting/TestData/TCcollege.xls','课程订阅').dict_data()[4]
        r=requests.post(self.base_url_1,params=data)
        result=r.json()
        self.assertEqual(result['code'], '0')
        self.assertEqual(result['msg'],'订阅成功')
        if __name__=='__main__':
             unittest.main()

注意,每个测试案例的文件名需要已test开头,test_1,test_2这样的形式,data里边的内容就是post请求的入参,通过这条语句拼接成完整的requests入参:r=requests.post(self.base_url_1,params=data)即url+prams,post请求分为head和data。self.assertEqual为出参交易,通过这个方法可以校验出参的正确性,result[‘code’]即,服务器返回的状态码,对状态码进行对比,result[‘msg’]即返回的message,对返回的 message进行对比,如果不同就会校验出错。
最后需要调用主函数对unittest.main对真个测试案例进行组装
那么问题来了,在进行着一系列的操作后我们只是对测试案例进行了组装,并没有执行,因为我们需要把测试案例和执行的操作进行分开编写,这样就可以不用每个案例都嵌套一个执行函数,方便一次性执行多个案例了。

执行函数

在执行函数在我们需要导入sys,HTMLTestRunner,注意了,这个库是不能进行pip install的,需要自己网上进行下载,由于python2和python3版本的HTMLTestRunner,是不同的,这里我放上python3版本的,下载之后放在python的安装目录的Lib下边
下载链接
下载链接:https://pan.baidu.com/s/1Sdlzsfov3ecvPCgMnLiYOA
百度网盘:
在这里插入图片描述执行函数代码:

#coding=utf-8
import time, sys
from HTMLTestRunner import HTMLTestRunner
import unittest
#测试案例的路径:test_dir
test_dir= "F:/AutoTestting/testcase"
#调用discover方法,遍历执行一test开头的测试案例脚本
discover=unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')
#运行测试案例生成html报告的函数
def ReportBulid():
    now=time.strftime("%Y-%m-%d %H_%M_%S")
    #F:/AutoTestting/report/,测试报告html格式存放的路径
    filename='F:/AutoTestting/report/'+now+'result.html'
    fp=open(filename,'wb')
    runner=HTMLTestRunner(stream=fp,title="通财学院测试报告",description='通财学院')
    runner.run(discover)
    fp.close()


if __name__=="__main__":
    ReportBulid()

运行命令:.
.点表示执行结果和预期一致,F表示该接口有报错。

执行结果:
在这里插入图片描述在这里插入图片描述好了,这个接口的测试组装过程就这些,后续有在linux环境执行,并配合django进行可视化的测试搭建,下次再见!
github项目地址:https://github.com/simpl8/unittest.git

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值