文档章节

pytest文档30-功能用例与自动化用例完美对接(allure)

o
 osc_zoa3moe9
发布于 2019/12/08 12:26
字数 1148
阅读 3
收藏 0

精选30+云产品,助力企业轻松上云!>>>

前言

做自动化做久了,经常会思考一个问题,到底别人是怎么做的自动化,跟自己的有啥不一样,看过不少书和资料,都是停留在demo的层面。 真正把自动化做的好的大牛又不屑于分享自己的劳动成果,所以大部分情况就是一群菜鸡在群里互啄,停留在初级入门的demo层面上。 到底自动化要达到什么样的效果呢?这里我把最近的研究成果分享下,有经验的小伙伴也可以一起交流下。

功能用例

我一直认为一切的自动化用例是基于功能测试用例的, 脱离了功能测试用例,你的代码写的再漂亮,那也仅仅是show代码的。 面试的时候经常会遇到一个问题,一般领导型的面试官会问:你们自动化做到了什么程度?自动化用例覆盖率达到了多少?

自动化用例覆盖率是一个很好的衡量标准,比如你功能测试用例有100条,你的自动化用例写了90条,用例覆盖率是90%?当然不是!!! 你的自动化用例如果跟功能用例搭不上边,那都是无效用例,覆盖率也许是0%,仅仅是你自己瞎写的!

所以自动化用例是去翻译你的功能用例 ,一个一个去覆盖,让功能case,变成自动化用例的case,一一对应起来的(没写过功能用例的,后面就不用看了)。

写功能用例的平台有很多,比如jira,禅道,testlink等,这里以禅道系统为例,比如我的"编辑文章分类"模块下了3个用例

其中的一条用例是这样的,有前置条件,用例的步骤和期望结果,这才是一个标准的用例

自动化用例

功能用例写完之后,接着是如何去用代码去实现功能用例,这里用的是pytest框架+allure报告,其中一条用例的部分代码应该如下

  • feature 对应模块名称
  • story 对应用例的标题
  • testcase 对应禅道系统的bug用例url地址,关联起来
  • issue 如果这个用例有bug,应该关联对应的bug地址
  • 用例描述: 对应def下的描述步骤
import allure
# 上海-悠悠,QQ交流群:750815713
# 博客地址:https://www.cnblogs.com/yoyoketang/

@allure.feature("编辑分类文章")
class TestArticleclassify():
    '''编辑文章分类'''


    @allure.story("登录-编辑文章分类,重复保存,保存失败")
    @allure.issue("http://49.235.92.12:8080/zentao/bug-view-1.html")  # 禅道bug地址
    @allure.testcase("http://49.235.92.12:8080/zentao/testcase-view-5-1.html")  # 禅道用例连接地址
    def test_edit_classify5(self, login):
        '''用例描述:编辑文章分类-输入重复的分类,保存失败,不能添加重复的
        setup: 登录login
        step1: 编辑文章分类,输入文章类别,如:计算机
        step2: 点保存按钮
        step3: 重新打开编辑页,输入:计算机
        step4: 再次点保存按钮
        assert: 保存失败,提示:已存在
        '''
        driver = login
        edit = ArticleclassifyPage(driver)
        edit.click_classify_nav()
        edit.edit_classify("计算机")
        res2 = edit.is_edit_classify_success("计算机")
        print("编辑是否成功:%s"%res2)
        assert res2  # 断言

前置条件:login,应该是单独抽出来的写到conftest.py,作为一个前置fixture功能

import pytest
from selenium import webdriver
from pages.login_page import LoginPage
import time
# 上海-悠悠,QQ交流群:750815713
# 博客地址:https://www.cnblogs.com/yoyoketang/

# request 内置的fixture

@pytest.fixture(scope="session")
def driver(request):
    '''只打开浏览器和关闭浏览器'''
    driver = webdriver.Chrome()
    driver.maximize_window() # 最大化

    def end():
        print("全部用例执行完后 teardown quit dirver")
        time.sleep(5)
        driver.quit()

    request.addfinalizer(end)
    return driver

@pytest.fixture(scope="session")
def login(driver):
    web = LoginPage(driver)
    web.login()
    return driver

LoginPage 页面的封装,可以添加操作步骤,step对应每个步骤,我这里登录几个步骤写一起了,也可写的更详细

# 上海-悠悠,QQ交流群:750815713
# 博客地址:https://www.cnblogs.com/yoyoketang/

class LoginPage(Base):

    loc_用户名 = ("id", "id_username")
    loc_密码 = ("id", "id_password")
    loc_登录按钮 = ("xpath", "//*[text()='登录']")

    # 判断登录成功
    loc_后台页面 = ("xpath", "//*[text()='后台页面']")

    @allure.step("登录")
    def login(self, username="admin", password="yoyo123456"):
        '''登录'''
        self.driver.get(login_url)
        self.send(self.loc_用户名, username)
        self.send(self.loc_密码, password)
        self.click(self.loc_登录按钮)

    @allure.step("登录结果判断")
    def is_login_success(self):
        '''判断是否登录成功 True  False'''
        result = self.is_element_exist(self.loc_后台页面)
        return result

测试报告

接着查看运行结果的测试报告,展示效果如下

这样我们只需拿着测试报告,就可以交出完美的答案了!

o
粉丝 1
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
pytest文档32-allure描述用例详细讲解

前言 pytest+allure是最完美的结合了,关于allure的使用,本篇做一个总结。allure报告可以很多详细的信息描述测试用例,包括epic、feature、story、title、issue、testcase、severity等环境准...

osc_ui6dytbk
01/16
3
0
allure描述用例详细讲解

前言 pytest+allure是最完美的结合了,关于allure的使用,本篇做一个总结。 allure报告可以很多详细的信息描述测试用例,包括epic、feature、story、title、issue、testcase、severity等 环境...

osc_unnbi4yg
03/15
4
0
pytest文档31-allure标记用例级别severity

前言 我们在做功能测试的时候,执行完一轮测试用例,输出测试报告的时候,会有统计缺陷的数量和等级。在做自动化测试的过程中,当你的测试用例越来越多的时候,如果执行一轮测试发现了几个测...

osc_57h7mkgj
01/14
1
0
Pytest+Allure定制报告

不可否认,pytest是最好的单元测试框架之一,而allure是一个比较好的测试报告,以前在接口测试时用了这个方法,很久没有用了,网上收集了些相关资料,放在这里,供以后查询。 最近在研究接口...

osc_7x0xq1bs
2019/05/27
4
0
Pytest+Allure

概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1、简单灵活,容易上手,文档丰富; 2、支持参数化,可以细粒度地控制要测试的测试用例; 3、能够支持简单的单元...

awesome@qa
2019/06/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用命名管道承载gRPC

最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了。 gRPC设计 gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解...

osc_nq69o22c
39分钟前
16
0
06-敏捷开发框架-apis 脚本库 引用位置无关性设计

动态引入技术的设计,对我们来说非常重要。 同时也说明动态语言的使用对我们来说也是非常重要。 没有动态语言的支撑,有些想法可能不容易实现,或者有替代方案,可能会花更大的代价。 前端开...

osc_5zg9z6t1
41分钟前
21
0
(三)学习了解OrchardCore笔记——灵魂中间件ModularTenantContainerMiddleware的第一行①的模块部分

  了解到了OrchardCore主要由两个中间件(ModularTenantContainerMiddleware和ModularTenantRouterMiddleware)构成,下面开始了解ModularTenantContainerMiddleware中间件第一行代码。   ...

osc_kdarxvx0
43分钟前
15
0
50Mn18Cr4V锻锻环件

电机无磁护环怎么锻性能才能《高高》?50Mn18Cr4V高锰无磁钢在变形温度为900~1 100℃、应变速率为0.1 ~10s-1条件下的热变形行为. 结果,VC第二相的应变诱导析出对50Mn18Cr4V的热变形行为产生...

无磁钢
43分钟前
16
0
【遇见offer】一汽-大众实习生专场来啦!成长+学习+福利,一个也不能少~

在上次一汽-大众的社招直播之后,实习生的专场招聘也终于来啦! 针对2020年暑期,我们提供了非常多的实习岗位给大家选择。 如果你想得到大厂实习的宝贵经验,如果你想得到更快速的成长,如果...

osc_b88oux8w
44分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部