hyrobot 使用说明1

前言

黑羽robot是一款自动化测试框架。要学习它,您需要具备一些自动化测试的基本概念。

本教程讲解 的案例 是 一个 web 系统的自动化。 如果你 还不了解 基于 selenium 的 web自动化,请先 学完我们的 web自动化教程。

点击这里先学习Selenium Web自动化

黑羽robot 和 RobotFramework 的关系


点击这里,边看视频讲解,边学习以下内容

黑羽robot 是基于 RobotFramework, 增强的一款自动化框架。

为什么要基于 RobotFramework ?

RobotFramework 作为系统测试框架,有如下优点:


那么, RobotFramework有 缺点 吗?

白月黑羽认为,最大的缺点就是:反人类的 测试用例语法 。

可能 RobotFramework 的开发者 认为,用Python语言写测试用例比较难,所以自己发明了一套语法写自动化测试用例。

实际上,不但没有降低写用例的难度,反而提高了。 因为 RF的那套语法 反而比 Python 更难学难用。

特别是处理稍微复杂点的任务,比如循环、判断、字典里面包含列表这种 复杂些的数据结构, 用 RobotFramework 可以说是太痛苦了。

而且,调试 RF用例 也 非常的麻烦。

想做好自动化开发,却不想学编程语言? 梦该醒了。


那么,黑羽robot 在 RobotFramework 基础上,增强了什么?

饱受RF语法折磨的人,会发现再也不需要学习RF奇葩的语法了,一切都是Python。只要你有Python语言基础,一切都是那么的轻松自然。

安装

安装 被测系统

要讲解 自动化测试,需要一个 被测系统 。

我们使用 白月SMS系统 作为被测系统。

请大家点击这里,按照说明下载、安装、运行 白月SMS系统

针对该系统,现在有一批测试用例,准备自动化。 点击这里下载 白月SMS系统的测试用例文档,

接下来,我们就使用 黑羽robot 框架, 开发这些用例的自动化。

安装 黑羽robot


点击这里,边看视频讲解,边学习以下内容

首先确保你电脑上安装好了 Python 3.7 或者 3.8 版本的解释器

  1. 安装RF

黑羽robot基于Robot Framework ,所以必须先安装RobotFramework

直接执行如下Pip命令即可:

pip install robotframework 

  1. 安装黑羽robot

点击这里下载黑羽robot项目包

解压下载的zip包,会产生一个名为 autotest_hyrobot 的目录, 这就是hyrobot的自动化项目目录。

你修改该目录的名字,比如我们要讲解 自动化测试 白月SMS系统 , 就可以改名为 autotest_bysms


建议:用PyCharm 等IDE直接打开项目文件夹,一定要 确保 hyrobot 目录 在项目根目录下面,如下

项目目录结构

点击这里,边看视频讲解,边学习以下内容

黑羽robot 项目目录中包含

用例和套件

点击这里,边看视频讲解,边学习以下内容

我们先了解一下用例目录的 结构 和 基本概念

cases 目录下面的 每个目录 和 py 文件 都 对应一个 测试套件

所谓测试套件,就是 测试用例的集合 。

我们把功能相关的测试用例组合起来放在一起,成为某个测试套件。

用例文件的编写、执行、产生日志报告

点击这里,边看视频讲解,边学习以下内容

编写用例

用例文件格式如下:

文件里面每个类对应一个用例。

类的 name 属性 指定 用例名

类的 teststeps 方法 里面的代码 就是 测试步骤

特别注意 : 用例类名 一定要保证唯一 ,推荐包含用例编号。比如

# 类名保证唯一,推荐包含用例编号
class UI_0101:
    # 测试用例名字
    name = '管理员首页 - UI-0101'

    # 测试用例步骤
    def teststeps(self):

代码最前面加上

from hyrobot.common import *

导入 hyrobot 库,库里面有一些函数 和

声明每个步骤使用 STEP 库函数

打印信息用 INFO 库函数

检查点用 CHECK_POINT 函数。


具体的使用示例,参考讲解视频。

执行用例

执行用例需要

具体的使用示例,参考讲解视频。

日志和报告

执行完后,就会产生 汉化的 日志 和 报告。参考讲解视频。

数据驱动用例

点击这里,边看视频讲解,边学习以下内容

做过自动化测试的朋友经常听说过 数据驱动 (或者面试的时候被问到过)。

什么是数据驱动?

如果有一批测试用例,具有 相同的测试步骤 ,只是 测试参数数据不同 。

自动化测试时,把测试数据从用例代码中 分离 开来,以后增加新的测试用例,只需要修改数据。

这就是数据驱动。


举个例子:

某系统 登录功能的测试,有一批测试用例,其执行的步骤几乎都是一样的,只是使用的测试参数不同。

比如:


上面每种输入对应一个用例, 聪明的读者应该能想到 可以把整个测试逻辑封装到一个库函数中,如下所示

def login(username,password):
   # 下面写登录流程

但是,测试用例仍然需要定义一个个的类,如下, (假设正确的用户名为 user,密码为 123456)

class c00101:
    name = '登录测试 - c00101' 

    def teststeps(self):
      msg = login('','123456')
      CHECK_POINT(msg, '错误的用户名密码')


class c00102:
    name = '登录测试 - c00102' 

    def teststeps(self):
      msg = login('use','123456')
      CHECK_POINT(msg, '错误的用户名密码')

# 下面还有类似的用例定义      

这样做,当然可以,就是有些麻烦了。


这种情况可以使用 HyRobot用例 的 数据驱动格式,只需如下定义即可

class c_login_x:
    # cases里面每个元组定义每个用例的数据
    # 第一个数据是用例名称, 后面的数据是用例参数
    cases = [
        ('登录 - c00101', '','123456'),
        ('登录 - c00102', 'use','123456'),
        ('登录 - c00103', 'user1','123456'),
    ]

    def teststeps(self, para_index):
        # 取出参数
        username, password = self.cases[para_index][1:]
        # 下面写登录流程

这样,我们就不需要定义那么多的测试用例类了, 而且测试数据也可以集中存放。


视频讲解中的被测系统白月SMS如何安装,看课后练习部分说明

视频讲解中的 测试用例代码如下

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()




课后练习

题目1

根据教程



参考答案

参考下一节课的开始部分

↑