声明
hytest 自动化软件测试框架 永久 开源免费,请大家放心使用。
hytest 简介
点击这里,边看视频讲解,边学习以下内容
hytest (黑羽test)是白月黑羽自己研发的自动化测试框架,它非常适合 做 系统测试 自动化, 而相比之下,pytest、unittest 更适合白盒的单元测试、集成测试。
它有如下优点:
上手非常简单
hytest 让大家直接用 Python 来写测试用例。
如果你有 Python编程经验,1小时就可以上手,1天就可以灵活使用。
操作直观易懂
测试用例以 目录文件结构存放,清晰明了
初始化清除 机制清晰灵活
可以灵活地 挑选 要执行的测试用例
漂亮的测试报告
本教程 通过一个网站系统的自动化 为例 来讲解 hytest。
以前我们开发过基于 robotframework 的自动化框架 - 黑羽robot
但是现在我们推荐使用 黑羽test 。
如果您依然想使用黑羽robot, 可以点击这里查看相关教程
安装、执行
安装 hytest 非常简单,执行如下命令即可:
pip install hytest
hytest 需要 Python 3.7 或者 更高版本
执行hytest 自动化非常简单:
只需要新建一个 项目目录 , 里面创建一个名为 cases 的子目录用来存放测试用例代码即可。
我们可以使用示例代码先看看。
点击这里下载zip文件, 解压后产生一个 cases示例目录。
这里目录里面的结构和自动化用例代码,后面会有讲解。
我们先运行hytest自动化测试,看看效果如何。
非常简单,只需要
打开命令行窗口
进入自动化代码根目录,也就是 cases 的上层目录 (注意不是cases目录,是cases的父目录)
运行 hytest
运行命令 hytest 实际上就是执行如下的命令
python -m hytest.run
如果你是苹果Mac系统, 安装时或许不能自动产生hytest可执行程序,这时可以执行命令
python3 -m hytest.run
大家可以看一下执行后的命令行窗口界面输出,展示了执行每个用例的结果。
执行自动化,会产生一个log目录。里面有详细的 测试日志 和 测试报告。
测试报告是HTML格式的,会自动在浏览器中打开,可以通过右上角的浮动菜单:
切换 精简、详细 两种模式 方便浏览内容
跳转到下一个、上一个错误 方便在出现问题是,快速定位到问题所在点
关于hytest 命令行的参数使用,后面会有详细讲解,以后如果忘了某个命令参数可以执行 hytest -h 来查看参数说明。
以后真正做项目自动化的时候,通常还需要创建一些其他的目录,比如
lib 目录
用来存放 测试用例 需要使用的共享代码库。
doc 目录
存放 一些说明文档
可以使用命令参数 --new 来创建一个 hytest 的自动化项目目录,里面会包含一个cases目录和一个示例代码文件。
比如,执行
hytest --new auto1
就会在当前目录下创建名为 auto1 的 项目目录。
用例目录结构
点击这里,边看视频讲解,边学习以下内容
我们先了解一下用例目录的 结构
自动化测试用例 是 写在 python 文件 中的 一个 python 类
对应一个测试用例文档里面的用例
一个 代码文件 可以存放 多个用例
多个代码文件可以用目录组织起来
cases 目录下面的 每个目录 和 py 文件 都 被称之为 测试套件(suite)
测试套件 是 测试用例的集合 , 通俗的说,就是 一组用例 。
为例方便管理,我们把功能相关的测试用例组合起来放在一起,成为某个测试套件。
包含 测试用例类 的 python 文件 称之为一个 套件文件
包含 套件文件的 目录 称之为 测试套件目录
用例类的定义
用例文件格式如下:
文件里面每个类对应一个用例。
类的 name 属性 指定 用例名
如果没有name 属性,那么类名就会被当做是用例名称
类的 teststeps 方法 对应 测试步骤 代码
测试步骤代码 就是自动化地 一步步执行测试用例 的程序。
所以一个类 必须要有 teststeps 方法,才会被 hytest 当做是一个测试用例类。
比如
# 建议:类名 对应 用例编号
class UI_0101:
# 测试用例名字,也建议以用例编号结尾,方便 和 用例文档对应
# 也方便后面 根据用例名称 挑选执行
name = '管理员首页 - UI-0101'
# 测试用例步骤
def teststeps(self):
为了使我们的测试日志和报告 更加清晰的展示执行的过程, 我们可以调用 hytest 的一些库函数,输出 执行步骤、提示信息 、检查点信息。
代码最前面加上 如下代码 ,导入 hytest 库里面 的常用 函数
from hytest import STEP, INFO, CHECK_POINT
class UI_0101:
def teststeps(self):
STEP(1,'打开浏览器')
var1 = 'sdf'
INFO(f'var1 is {
var1}')
CHECK_POINT('打开成功', var1.startswith('1sd') )
STEP(2,'登录')
CHECK_POINT('检查登录是否成功', True)
STEP(3,'查看菜单')
CHECK_POINT('检查菜单是否正确', True)
STEP 函数
用来声明每个测试步骤,这样日志报告更清晰
INFO 函数
用来打印一些信息在日志和报告中,方便出现问题时定位。
当然,如果你在开发调试阶段也可以直接使用print,在终端查看内容
CHECK_POINT 函数
用来声明测试过程中的每个检查点,任何一个检查点不通过,整个测试用例就被认为不通过。
缺省情况下,一个检查点不通过,后面的测试代码就不会继续执行。
如果某个你希望检查点即使不通过,后续代码仍然继续执行,可以使用参数 failStop=False ,如下所示
def teststeps(self):
CHECK_POINT('即使不通过也不中止1', False, failStop=False)
CHECK_POINT('即使不通过也不中止2', False, failStop=False)
具体的使用示例,参考讲解视频。
一个例子
点击这里,边看视频讲解,边学习以下内容
要讲解 自动化测试,需要一个 被测系统 。
我们使用 白月SMS系统 作为被测系统。
针对该系统,现在有一批测试用例,准备自动化。 点击这里下载 白月SMS系统的测试用例文档,
我们先完成用例 UI-0101 的自动化
代码开发,请看视频讲解。对应的参考代码如下
参考代码如下
from hytest import *
from selenium import webdriver
class UI_0101:
name = '检查操作菜单 UI_0101'
def teststeps(self):
STEP(1,'登录网站')
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
wd = webdriver.Chrome(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