码迷,mamicode.com
首页 > 其他好文 > 详细

hyrobot使用

时间:2021-03-30 13:03:32      阅读:0      评论:0      收藏:0      [点我收藏+]

标签: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,在某个套件中
force_tags = [登录功能,冒烟测试,UI测试]

那么该文件里面所有测试用例都具有了这些标签。

例如:TestOne4.py中全局变量,force_tags = [‘登录功能‘]

技术图片

 

 执行结果:在每个测试用例标签中都是显示

技术图片

  • 套件文件全局变量 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)
View Code

技术图片

 

 

3)套件目录的初始化、清除

在这个目录下面创建名为 __st__.py 的文件。

和套件文件一样,套件目录的 的初始化、清除 也是在 文件中 添加全局函数 suite_setup、suite_teardown。技术图片

 

 

技术图片

 

 

9、缺省初始化、清除

用例文件、和套件目录 除了 可以使用 suite_setup、suite_teardown 对整个目录进行初始化清除,还支持另外一种初始化清除: 缺省初识化、清除

就是定义 名称为 test_setup 和 test_teardown 的全局函数。

如果在 用例文件 中定义了 全局函数 test_setup ,如果 该文件中 有用例本身没有初始化 方法, 执行自动化的时候就会对该用例,使用这个 test_setup 初始化

如果在 用例文件 中定义了 全局函数 test_teardown ,如果 该文件中 有用例本身没有清除 方法, 执行自动化的时候就会对该用例,使用这个 test_teardown 清除。

 

参考:http://www.python3.vip/tut/auto/hyrobot/02/

 

hyrobot使用

标签:one   全局变量   输入   sele   pat   loading   点击   cat   sharp   

原文地址:https://www.cnblogs.com/ychun/p/14586735.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!