selenium02


第二天 selenium基础,unittest框架,ddt
第三天 ddt实际应用,yaml文件,ecshop线性化脚本
第四天 封装相同步骤,测试数据与脚本分离,引入PO设计模式进行基础类与操作页面的封装


1.单元测试框架

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

# unittest框架的全局变量:
    # 1.使用 类名.变量名,如 MyTest.name = "全局变量1"
    # 2.使用 globals()["变量名"],如 globals()["name"] = "全局变量2"
    # 3.使用 self.变量名,如 self.name = "全局变量3"
    # 全局变量1、2,在不同方法之间可以实时使用、修改变量值,
    # 全局变量3,在unittest框架,无法在不同方法间共享参数变动

import unittest
class MyTest(unittest.TestCase):
    # pass

    # 环境预置
    # def setUp(self):
    #     print('环境预置')

    @classmethod   #使用setUpClass必须声明装饰器
    def setUpClass(self):
        ###批量执行用例时使用
        print('环境预置')

    #测试用例
    #测试用例必须是test开头
    def testCase_1(self):
        #期望结果
        expectResult = 'hello'
        actualResult = 'hello world'
        print('测试用例的操作步骤1')
        #断言
        self.assertIn(expectResult,actualResult)

    def testCase_2(self):
        #期望结果
        expectResult = 123
        print('测试用例的操作步骤2')
        #断言
        self.assertEqual(expectResult,123,msg = "不相等")

    # 恢复环境
    # def tearDown(self):
    #     print('恢复环境')

    @classmethod   #使用tearDownClass必须声明装饰器
    def tearDownClass(self):
        print('恢复环境')

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

2. 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\""}
        }

3.补充yaml:

    yaml特点: 
            1.大小写敏感
            2.使用缩进表示层级关系,缩进不允许使用Tab键,只能空格
            3.缩进的空格数量不限制,只要相同层级的元素左对齐即可
            4.使用 # 表示注释,代表注释一行,跟python类似

使用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)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值