7.python+unittest

pycharm相关设置:
    1.左侧字体:设置 - Appearance & Behavior - Appearance - Theme选择Intellij为白色,勾选第2个,选18号
    2.代码大小:Editor - Colors & Fonts - Font - Scheme选择Default为白色,字号设置26
    3.运行结果大小:Editor - Colors & Fonts - Console font ,字号设置26
    4.解释器:Project xx - Project Interpreter 


json和字典的主要区别:
    1. 字典是一种数据结构,类型是dict,json是一种数据格式,类型是字符串
    2. 字典的键不能重复,json的键可以重复
    3. 字典的键可以是字符串,数字,元组,json的键只能为字符串
    4. 字典的字符串可以用单引号或双引号,json的字符串强制用双引号
    5. 字典可以嵌套元组,json不能嵌套元组
    6. 字典的布尔值首字母大写,空是None,json布尔值都是小写,空是null;

安装requests,使用命令 pip install requests, 
    若在线安装失败,则使用以下镜像命令安装:
    pip install requests -i http://pypi.douban.com/simple --trusted-host pypi.douban.com


1.Python接口入门练习

    课件\09_接口测试\python+requests库的接口自动化测试.docx

        www.pingan.com/cms-tmplt/pinganlife/synShopList.do
        参数dateUpdated:2017-12-02
        平安接口是2017-12-02有数据,2020-06-09能跑,2010-06-09不能跑    
        

2.单元测试框架
    执行单个用例setUp()、tearDown()
    执行批量用例setUpClass()、tearDownClass() ,注意加装饰器@classmethod

    完整示例代码如下:

import unittest,requests,ddt

@ddt.ddt
class MyTest(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        pass

    @classmethod
    def tearDownClass(self):
        pass

    @ddt.data({"name":"juzi","expectResult":1},
              {"name":"juzi2","expectResult":2})
    # @ddt.file_data("testData.json")
    @ddt.unpack
    def testCase(self,name,expectResult):
        print(name,expectResult)
        actualResult = '12啊'
        #断言
        self.assertIn(str(expectResult),actualResult)

if __name__ == "__main__":
    unittest.main()


3.用例断言
    self.assertEqual(expectResult,actualResult)
    self.assertIn(expectResult,actualResult)

4. ddt数据驱动模块相关

    在线安装:pip install ddt
    若在线安装失败,则使用以下镜像安装:
    pip install ddt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com


    ddt使用方式:方法前面加@
    ddt常用方法: 
        ddt.ddt     在类前面进行声明ddt 

        ddt.data()  引入测试数据ddt.data(),括号里面的数据可以封装成字典格式,不加引号,

                    单条数据如@ddt.data({"name":"juzi","resultCode":"0"})

                    多条数据如@ddt.data({"name":"juzi","resultCode":"0"},
                                          {"name":"juzi2","resultCode":"22"})

        ddt.unpack   将测试数据分解。如果引入的是参数文件 ddt.file_data(),则分解可以省略

        ddt.file_data() 引入外部参数(测试数据文件),括号里面是引号,引号里面是.json文件


    注意:ddt引入数据、分解数据,都在测试用例上面,即def testCase()上面,
        引入数据(如{"name":"tom","expectCode":"0"})的所有变量名name、expectCode都要放在testCase()里面,
        即testCase(self,name,expectCode)

    注:json文件格式,需要用双引号:

        {
          "testCase01":{"username":"juzi8","expectResult":"msg\":\"invalid username/password combination\""},
          "testCase02":{"username":"juzi9","expectResult":"msg\":\"invalid username/password combination9\""}
        }


5.接口自动化用例设计

    课件\09_接口测试\01_http接口\http协议接口测试课堂练习.docx


6.完整的项目接口自动化

    课件\09_接口测试\Br_Api.docx

    课件\09_接口测试\Br_Api接口(数据库信息).txt

                    服务器地址:211.149.163.145
                    用户名:br_api
                    数据库密码:z2CGg7s6P7
                    端口:3306
                    数据库:br_api

    4-1.创建项目文件夹,如:br_api接口自动化,
        在该文件夹下创建同级子文件夹testCases、public、reports;
    4-2.在public文件夹下创建public.py,封装成公共部分;
    4-3.在testCases文件夹下创建相关用例文件(注册、登录等),
        如:1.新用户注册.py  2.登录接口.py   3.创建任务接口.py ;
    4-4.如果需要参数化,则继续在testCases文件夹下创建对应的参数化json文件;
    4-5.如果需要批量执行自动化用例,把runAllCases.py复制到项目文件夹下,
        即:放到br_api接口自动化下面
    4-6.使用runAllCases.py,需要把HTMLTestRunner.py复制到Python安装文件夹
        下的lib文件夹下;
    4-7.注意runAllCases.py文件里面,16行的发件人可以写自己邮箱,18行的收件人可以
        写项目领导邮箱,27行的邮件标题注意改成所做的项目,38行的邮箱登录授权码(可百度),
        注意60行、65行的路径,78行的标题


7.使用Jenkins持续集成

    创建定时任务:
    0 20 * * *
    批处理命令: 
    D:
    cd workspace\br_api接口自动化
    python runAllCases.py


8.注意事项

    1.testCases里面的用例名称最好为英文,否则reports里面的报告无数据
    2.testCases里面的参数化文件最好与用例名称一致,方便查看
    3.如果需要按顺序执行用例,用例名称可以以test_1_register、test_2_login命名,
        或以test1_register、test2_login命名
    4.需要将HTMLTestRunner.py文件复制到Python安装目录的lib文件夹下
    5.新版ddt.file_data方法需要修改ddt.py文件249行左右,将utf-8修改为gbk,否则不支持中文
    6.注意函数名和变量名不要重复,如token = token()这种情况会报错


9. unittest单元测试框架总结:
    # 1. setup()、teardown(),每条用例执行前后都要运行一次,适用于一条用例,多条用例耗费时间
    # 2. setUpClass()、tearDownClass(),所有用例执行前后总共运行一次,适用于批量执行用例
    # 3. 测试用例的执行顺序依据用例名称顺序执行
    # 4. 自动化测试脚本必须要有环境恢复(删除存入数据库的内容等)    
    # 5. 环境恢复放在用例后,但自动化脚本的环境恢复代码可以紧跟在环境预置之后,不影响执行顺序


10.补充(了解即可):

使用ddt.file_data("data.yaml"),需要先安装pip install pyyaml

data.yaml里面内容有如下两种写法(注意参数后面有一个空格):

    test01:
      username: 'juzi01'
      password: 123456
      password_confirmation: 123456
      expectResult: '"username":"juzi01"'
    test02:
      username: 'juzi02'
      password: 123456
      password_confirmation: 123456
      expectResult: '"username":"juzi02"'

    对应脚本写法:
    @ddt.file_data('data.yaml')
    @ddt.unpack
    def testCase(self,username,password,password_confirmation,expectResult):
        parms = {"username":username,"password":password,"password_confirmation":password_confirmation}
        res = requests.post(self.url,parms)
        #print(res.text)
        #print(expectResult)
        self.assertIn(expectResult,res.text)

或:

    test01:
      parms:
        username: juzi03
        password: 123456
        password_confirmation: 123456
      expectResult: '"username":"juzi03"'
    test02:
      parms:
        username: juzi04
        password: 123456
        password_confirmation: 123456
      expectResult: "\"username\":\"juzi04\""

    对应脚本写法:
    @ddt.file_data('data.yaml')
    @ddt.unpack
    def testCase(self,parms,expectResult):
        res = requests.post(self.url,parms)
        #print(res.text)
        #print(expectResult)
        self.assertIn(expectResult,res.text)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值