标签:one 全局变量 输入 sele pat loading 点击 cat sharp
参考:http://www.python3.vip/tut/auto/hyrobot/01/
1、简介
黑羽robot 在 RobotFramework 基础上,将Python代码转化为.ride可以运行的程序。
并且汉化测试报告。
2、被测系统
https://pan.baidu.com/s/1rnWhuroIMNebStzpwLjsTA#list/path=%2F
安装被测系统
下载解压bysms.zip后,进入bysms目录,双击运行runserver.bat 即可启动 白月SMS系统。 如果出现命令行窗口闪退,可能是端口别占用。修改端口即可,
将80修改为8087,或者其他
python manage.py runserver 8087 --noreload
启动成功
访问: http://127.0.0.1/mgr/sign.html
输入如下管理员账号
用户名 :byhy 密码: 88888888
项目需求文档:http://www.python3.vip/tut/webdev/django/req_1/
测试用例:http://cdn1.python3.vip/files/selenium/testcases.xlsx
3、安装黑羽robot
项目架构:http://cdn1.python3.vip/files/hyrobot/autotest_hyrobot.zip
目录结构
测试套件
case目录下的每个目录和py文件都对应一个测试套件。
测试套件目录可以包含 子套件目录 和 子套件文件。
4、测试用例
文件里面每个类对应一个用例。
类的 name
属性 指定 用例名
类的 teststeps
方法 里面的代码 就是 测试步骤
特别注意
: 用例类名 一定要保证唯一
,推荐包含用例编号。
from hyrobot.common import *
# 类名保证唯一,推荐包含用例编号
class UI_0101:
# 测试用例名字
name = ‘管理员首页 - UI-0101‘
# 测试用例步骤
def teststeps(self):
导入 hyrobot 库,库里面有一些函数 和 声明每个步骤使用 STEP 库函数,在控制台打印信息用 INFO 库函数,检查点用 CHECK_POINT 函数。
INFO(‘suite_setup‘)
CHECK_POINT(msg, ‘错误的用户名密码‘)
STEP(1, ‘获取左侧菜单信息‘)
5、执行测试用例
进入到自动化项目根目
运行 run.bat
1)依据测试用例名称执行测试用例
--test testA # 执行名为 testA 的用例 --test testA --test testB # 执行名为 testA 和 testB 的用例 --test test* # 执行名字以 test 开头的用例
2)依据测试套件名称执行测试用例
run --suite TestOne
3)使用参数文件,执行测试用例
当需要执行某些测试时,一个测试用例的写,势必有些麻烦
run --test *0301 --test *0302 --test *0303 --test *1401 --test *1402
于是可以使用参数文件,可以把所有的参数都放在参数文件中,创建文件param,与run.bat放在同一个文件夹中,运行
run -A param
4)按照用例标签执行测试用例
给测试用例打上标签(‘登录功能、冒烟测试、UI测试’),这样在运行的时候,可以通过标签指定要运行哪些用例。标签 就是用例的属性特征描述。
force_tags = [‘登录功能‘,‘冒烟测试‘,‘UI测试‘]
那么该文件里面所有测试用例都具有了这些标签。
例如:TestOne4.py中全局变量,force_tags = [‘登录功能‘]
执行结果:在每个测试用例标签中都是显示
如果我们在测试套件目录初始化文件__st__.py定义了一个这样的 force_tags 全局变量, 那么该目录里面所有测试用例都具有了该tag。
结果:tag‘登录功能‘是在测试上面测试套件TestOne4中创建的,所以会组合显示。
5)根据标签挑选执行
在执行自动化的时候,我们可以通过命令行参数,指定标签,从而挑选要执行的测试用例。
# 执行包含 标签 ‘冒烟测试‘ 的用例. --include 冒烟测试 # 执行不包含标签 ‘冒烟测试‘ 的用例. --exclude 冒烟测试 # 执行 有冒烟测试、UITest 两个标签的用例 --include 冒烟测试ANDUITest # 执行 有 冒烟测试 或者 UITest 标签 的用例 --include 冒烟测试 --include UITest # 执行标签格式为 A*B 的用例,比如 A5B, AB, A444B --include A*B
例如:
利用方式3中param文件执行测试用例,并且排除 登录功能
run -A param --exclude 登录功能
param文件:
但是用例【管理员首页_UI_0401】【管理员首页_UI_0402】加了标签 force_tags = [‘登录功能‘]
用例【管理员首页_UI_0301】用全局tag
执行结果:只有用例【管理员首页_UI_0301】
6)指定关键测试用例
如果本次测试中有关键测试用例没有通过,整个测试就被视为测试不通过。反之,所有关键用例都通过,整个测试就视为通过。 即使100个中有99个非关键用例没有通过,只有1个关键通过。
hyrobot 执行测试时,如果没有命令行参数特别指定,每个测试用例都被视为关键测试用例。
我们可以通过命令参数 --critical
或 --noncritical
后面加 标签名称 来指定哪些用例 是 关键用例 或者 非关键用例。
运行时可以指定:
有first标签的是关键测试用例:
run --critical first
有first标签的是非关键测试用例:
run --noncritical first
具有 以 basic 开头 或者 important开头 的标签 的用例都是关键用例,其他用例都不是关键用例:
run --critical basic* --critical important*
6、 数据驱动
如果有一批测试用例,具有 相同的测试步骤
,只是 测试参数数据不同
。自动化测试时,把测试数据从用例代码中 分离
开来,以后增加新的测试用例,只需要修改数据。这就是数据驱动。
from hyrobot.common import * from selenium import webdriver import time class c_login_x: cases = [ (‘登录 - c00101‘, ‘byhy1‘,‘888888‘), (‘登录 - c00102‘, ‘byh‘,‘888888‘), (‘登录 - c00103‘, ‘‘,‘888888‘), ] def teststeps(self, para_index): # 取出参数 username, password = self.cases[para_index][1:] # 下面写登录流程 driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get(‘http://127.0.0.1/mgr/sign.html‘) driver.find_element_by_id(‘username‘).send_keys(username) driver.find_element_by_id(‘password‘).send_keys(password) driver.find_element_by_css_selector(‘button[type="submit"]‘).click() time.sleep(2) alterText = driver.switch_to.alert.text print(alterText) CHECK_POINT(‘弹出提示‘, alterText == ‘登录失败 : 用户名或者密码错误‘) driver.quit()
7、公共代码放入库中
例如,将登录代码放入login.py中,其他用例或是套件进行导入
使用
8、初始化与清除
创建测试开始条件
1)单个用例初始化、清除
然后修改 库文件 login.py ,如下
from hyrobot.common import GSTORE def open_brower(): chrome_options = webdriver.ChromeOptions() chrome_options.add_argument(‘--ignore-certificate-errors‘) driver = webdriver.Chrome(options=chrome_options) driver.implicitly_wait(5) # 使用黑羽robot 全局存储对象 GSTORE GSTORE[‘global_webdriver‘] = driver return driver # 获取 全局使用的 webdriver 对象 def get_global_webdriver(): return GSTORE[‘global_webdriver‘] def login_web(driver): driver.get(‘http://127.0.0.1:8087/mgr/sign.html‘) # 根据 ID 选择元素,并且输入字符串 driver.find_element_by_id(‘username‘).send_keys(‘byhy‘) driver.find_element_by_id(‘password‘).send_keys(‘88888888‘) # 根据标签名查找元素 driver.find_element_by_tag_name(‘button‘).click()
from time import sleep from lib.login import * from hyrobot.common import * # 单个用例清除 class c0101: name = ‘管理员首页_UI_0301‘ tags = "first" # 初始化方法 def setup(self): driver = open_brower() print("driver---",driver) login_web(driver) #清除方法 def teardown(self): driver = get_global_webdriver() print("driver:",driver) driver.quit() # 测试用例步骤 def teststeps(self): # 获取webdriver对象 对应 已经登录好的浏览器 driver = get_global_webdriver() print("teststeps-driver:",driver) STEP(2, ‘点击左侧客户菜单‘) # 先找到上层节点,缩小查找范围 sidebarMenu = driver.find_element_by_class_name(‘sidebar-menu‘) # 再找到内部元素 elements = sidebarMenu.find_elements_by_tag_name(‘span‘) # 第一个span对应的菜单是 客户,点击它 elements[0].click() STEP(3, ‘添加客户‘) # 点击添加客户按钮 driver.find_element_by_class_name(‘glyphicon-plus‘).click() # form-contorl 对应3个输入框 inputs = driver.find_element_by_class_name(‘add-one-area‘).find_elements_by_class_name(‘form-control‘) # 输入客户姓名 inputs[0].send_keys(‘南京中医院‘) # 输入联系电话 inputs[1].send_keys(‘2551867858‘) # 输入客户描述 inputs[2].send_keys(‘江苏省-南京市-秦淮区-汉中路-16栋504‘) # 第1个 btn-xs 就是创建按钮, 点击创建按钮 driver.find_element_by_class_name(‘add-one-area‘).find_element_by_class_name(‘btn-xs‘).click() # 等待1秒 sleep(1) STEP(4, ‘检查添加信息‘) # 找到 列表最上面的一栏 item = driver.find_elements_by_class_name(‘search-result-item‘)[0] fields = item.find_elements_by_tag_name(‘span‘)[:6] print(‘fields:::‘,fields) texts = [field.text for field in fields] print(‘texts:::‘,texts) # 预期内容为 expected = [ ‘客户名:‘, ‘南京中医院‘, ‘联系电话:‘, ‘2551867858‘, ‘地址:‘, ‘江苏省-南京市-秦淮区-汉中路-16栋504‘ ] CHECK_POINT(‘客户信息和添加内容一致 ‘, texts == expected)
2) 整个用例文件的初始化、清除
整个 用例文件 的初始化、清除 是在 文件中 添加全局函数 suite_setup、suite_teardown
from hyrobot.common import * from lib.login import * from time import sleep force_tags = [‘登录功能‘] def suite_setup(): INFO(‘suite_setup‘) driver = open_brower() login_web(driver) def suite_teardown(): INFO(‘suite_teardown‘) driver = get_global_webdriver() driver.quit() class c0401: # 测试用例名字 name = ‘管理员首页_UI_0401‘ # 测试用例步骤 def teststeps(self): driver = get_global_webdriver() STEP(1, ‘获取左侧菜单信息‘) # 先找到上层节点,缩小查找范围 sidebarMenu = driver.find_element_by_class_name(‘sidebar-menu‘) # 再找到内部元素 elements = sidebarMenu.find_elements_by_tag_name(‘span‘) menuTitles = [] for ele in elements: INFO(ele.text) menuTitles.append(ele.text) raise Exception STEP(2, ‘检查是否正确‘) CHECK_POINT("侧边栏菜单是否正确", menuTitles[:3] == [‘客户‘, ‘药品‘, ‘订单‘]) class c0402: name = ‘管理员首页_UI_0402‘ # 测试用例步骤 def teststeps(self): driver = get_global_webdriver() STEP(1, ‘点击左侧客户菜单‘) # 先找到上层节点,缩小查找范围 sidebarMenu = driver.find_element_by_class_name(‘sidebar-menu‘) # 再找到内部元素 elements = sidebarMenu.find_elements_by_tag_name(‘span‘) # 第一个span对应的菜单是 客户,点击它 elements[0].click() STEP(2, ‘添加客户‘) # 点击添加客户按钮 driver.find_element_by_class_name(‘glyphicon-plus‘).click() # form-contorl 对应3个输入框 inputs = driver.find_element_by_class_name(‘add-one-area‘) .find_elements_by_class_name(‘form-control‘) # 输入客户姓名 inputs[0].send_keys(‘南京中医院‘) # 输入联系电话 inputs[1].send_keys(‘2551867858‘) # 输入客户描述 inputs[2].send_keys(‘江苏省-南京市-秦淮区-汉中路-16栋504‘) # 第1个 btn-xs 就是创建按钮, 点击创建按钮 driver.find_element_by_class_name(‘add-one-area‘) .find_element_by_class_name(‘btn-xs‘) .click() # 等待1秒 sleep(1) STEP(3, ‘检查添加信息‘) # 找到 列表最上面的一栏 item = driver.find_elements_by_class_name(‘search-result-item‘)[0] fields = item.find_elements_by_tag_name(‘span‘)[:6] texts = [field.text for field in fields] print(texts) # 预期内容为 expected = [ ‘客户名:‘, ‘南京中医院‘, ‘联系电话:‘, ‘2551867858‘, ‘地址:‘, ‘江苏省-南京市-秦淮区-汉中路-16栋504‘ ] CHECK_POINT(‘客户信息和添加内容一致 ‘, texts == expected)
3)套件目录的初始化、清除
在这个目录下面创建名为 __st__.py
的文件。
和套件文件一样,套件目录的 的初始化、清除 也是在 文件中 添加全局函数 suite_setup、suite_teardown。
用例文件、和套件目录 除了 可以使用 suite_setup、suite_teardown 对整个目录进行初始化清除,还支持另外一种初始化清除: 缺省初识化、清除
就是定义 名称为 test_setup
和 test_teardown
的全局函数。
如果在 用例文件 中定义了 全局函数 test_setup
,如果 该文件中 有用例本身没有初始化
方法, 执行自动化的时候就会对该用例,使用这个 test_setup 初始化
如果在 用例文件 中定义了 全局函数 test_teardown
,如果 该文件中 有用例本身没有清除
方法, 执行自动化的时候就会对该用例,使用这个 test_teardown 清除。
参考:http://www.python3.vip/tut/auto/hyrobot/02/
标签:one 全局变量 输入 sele pat loading 点击 cat sharp
原文地址:https://www.cnblogs.com/ychun/p/14586735.html