自动化测试框架学习总结-hytest学习

视频:hytest - 测试自动化框架_哔哩哔哩_bilibili

资料:hytest 框架 - 白月黑羽

hytest 简介

hytest (黑羽test)是白月黑羽自己研发的自动化测试框架,它非常适合 做 系统测试 自动化, 而相比之下,pytest、unittest 更适合白盒的单元测试、集成测试。

特别注意,hytest是基于selenium工具的测试框架。语法用的是selenium的语法。

安装:

pip install hytest

运行:在要测试的目标软件的上一级目录使用: python -m hytest.run

结果:会自动生成一个中文版的测试报告。
如果要生成一个英文版的测试报告,只需要加上 --lang =en

用例目录结构:

  • 自动化测试用例 是 写在 python 文件 中的 一个 python 类。对应一个测试用例文档里面的用例
  • 一个 代码文件 可以存放 多个用例

  • 多个代码文件可以用目录组织起来

cases 目录下面的 每个目录 和 py 文件 都 被称之为 测试套件(suite)。测试套件 是 测试用例的集合 , 通俗的说,就是 一组用例 。

总结:要运行登录测试.py,不能通过python运行。而是在hytestProject这级目录的终端,使用pytest命令即可,log目录是使用pytest命令之后生成的目录。
前置环境:创建一个cases目录。 

用例类的定义:

文件里面每个类对应一个用例。类的 name 属性 指定 用例名。若没有name属性,那么类名会被当做用例名称。类的testeps方法 对应测试步骤代码。

# 建议:类名 对应 用例编号
class UI_0101:  //这个是类名UI_0101
    # 测试用例名字,也建议以用例编号结尾,方便 和 用例文档对应
    # 也方便后面 根据用例名称 挑选执行
    name = '管理员首页 - UI-0101'   //name表示测试用例名

    # 测试用例步骤
    def teststeps(self):   //teststeps()方法,是步骤

最常用函数和结构:

from hytest import STEP, INFO, CHECK_POINT

class UI_0101:

    def teststeps(self):

        STEP(1,'打开浏览器')     //声明每个测试步骤
        var1 = 'sdf'
        INFO(f'var1 is {var1}')    //打印信息在日志报告中,
//而使用print是打印在终端中。
        CHECK_POINT('打开成功', var1.startswith('1sd') ) 


        STEP(2,'登录')        
        CHECK_POINT('检查登录是否成功', True)  //声明测试过程中的检查点,
//任何一个测试点不通过就不会继续执行。
//通过CHECK_POINT('即使不通过也不中止',False,failStop=False)可以执行之后的语句

        STEP(3,'查看菜单') 
        CHECK_POINT('检查菜单是否正确', True)

一个例子:

注意,资料上使用的wd.find_element_by_id('username').send_keys('byhy')
这种方式已经淘汰了。

from hytest import *
from selenium import webdriver
from selenium.webdriver.common.by import By


class UI_0101:

    name =  '检查操作菜单 UI_0101'

    def teststeps(self):

        STEP(1,'登录网站')

        options = webdriver.EdgeOptions()
        options.add_experimental_option('excludeSwitches', ['enable-logging'])

        wd = webdriver.Edge(options=options)
        wd.implicitly_wait(10)

        wd.get('http://127.0.0.1/mgr/sign.html')

        wd.find_element(By.ID,'username').send_keys('byhy')
        wd.find_element(By.ID,'password').send_keys('88888888')

        wd.find_element(By.TAG_NAME,'button').click()

        STEP(2,'获取左侧菜单信息')

        eles = wd.find_elements(By.CSS_SELECTOR,'.sidebar-menu li span')

        menuText = [ele.text  for ele in eles]

        INFO(menuText)

        STEP(3,'检查菜单栏')

        CHECK_POINT('左侧菜单检查', menuText[:3] == ['客户','药品', '订单'])

        wd.quit()

执行结果:

公共代码放入库中:

资料上运行通过不了,可以尝试使用hytest +测试的目录
而只使用hytest,会出现:ModuleNotFoundError: No module named 'hytestProject'
这种错误。

初始化、清除:

hytest 的初始化/清除 支持 3种方式

  • 单个用例的初始化、清除
  • 整个用例文件的初始化、清除
  • 整个用例目录的初始化、清除

整个用例文件的初始化、清除,就是在 文件中 添加全局函数 suite_setup 和 suite_teardown

 缺省初始化、清除就是定义 名称为 test_setup 和 test_teardown 的全局函数。

数据关联:

可以使用hytest内置的对象 GSTORE,这个 GSTORE,可以使用字典式的赋值和取出元素,比如

from hytest import GSTORE

def suite_setup():
    GSTORE['环境1产品id'] = createProduct()
    GSTORE['driver'] = webdriver.Chrome()

def suite_teardown():
    deleteProduct(GSTORE['环境1产品id'])
    GSTORE['driver'].quit()


class c00303:
    name = '添加订单 - API-0303'

    def teststeps(self):
        createOrder(productid=GSTORE['环境1产品id'])

比如,可以在项目根目录下面创建一个share.py文件,内容如下

from selenium import webdriver
class gs:
    driver : webdriver.Chrome 
    productId : int

然后用例文件、 __st__.py 文件就可以这样使用了

from share import gs

def suite_setup():
    gs.productId = createProduct()
    gs.driver = webdriver.Chrome()

def suite_teardown():
    deleteProduct(gs.productId)
    gs.driver.quit()


class c00303:
    name = '添加订单 - API-0303'

    def teststeps(self):
        createOrder(productid=gs.productId)

gs 定义的时候,里面的各个属性就有类型声明,后面使用该属性时,IDE就可以进行代码辅助了

数据驱动 - data driven:

如果有一批测试用例,具有 相同的测试步骤 ,只是 测试参数数据不同 。自动化测试时,把测试数据从用例代码中 分离 开来,以后增加新的测试用例,只需要修改数据。

例如:

class c00003x:
    # ddt_cases 里面每个字典元素 定义一个用例的数据
    # 其中: name是该用例的名称, para是用例的参数
    ddt_cases = [
        {
            'name' : '登录 - 000031',
            'para' : ['user001','888888']
        },
        {
            'name' : '登录 - 000032',
            'para' : ['user0012','888888']
        },
        {
            'name' : '登录 - 000033',
            'para' : ['ser001','888888']
        }
    ]

    # 调用时,
    # hytest 框架执行时,会自动创建出3份用例实例
    # 并且在调用 teststeps时,把每个用例的参数设置在 self.para 中
    # 用例代码 可以直接从 self.para 中获取参数  
    def teststeps(self):
        # 取出参数
        username, password = self.para

        # 下面是登录测试代码

动态产生驱动数据:跳过

挑选用例执行 - 名称方式:

冒烟测试,只需要测试冒烟测试的那些用例。 或者调试自己写的某个用例的自动化,就只需要执行那一个用例。通过 --test 或者 --suite 命令行参数 来指定执行哪些用例或者套件,

比如,我们想只测试 药品管理 这个套件:hytest --suite  药品管理  

比如,我们想只测试 界面 - UI-0101 这个用例:hytest --test  "界面 - UI-0101"  

也可以使用通配符表示:hytest --test *0101  就是上一个例子的另一种写法。

如果要执行的用例太多,比如 1000 个,命令行参数岂非太长了?这时我们可以使用参数文件,可以把所有的参数都放在参数文件中,比如,创建一个名字为 args 的参数文件,内容如下

--test *0301
--test *0302
--test *0303
--test *1401
--test *1402

一行一个参数,然后, 我们的命令就只需要 hytest -A args 就可以了

挑选用例执行 - 标签方式:

hytest 还有一种选择测试用例的方法:根据用例的 标签 来挑选用例。

测试用例可以有多个标签描述它的属性特征, 比如一个登录测试的用例, 可以有3个标签: 登录功能、冒烟测试、UI测试。hytest 可以根据设置的标签 选择执行该用例。

给用例添加标签有如下几种方式

  • 全局变量 force_tags

如果我们在测试用例文件 定义了一个名为 force_tags 的全局变量,格式如下

force_tags = ['登录功能','冒烟测试','UI测试']

断点调试:

暂时跳过。

内容有点多,有些内容可以在工作之后在来回顾,暂时了解到这里就够了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值