前言

做自动化做久了,经常会思考一个问题,到底别人是怎么做的自动化,跟自己的有啥不一样,看过不少书和资料,都是停留在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

测试报告

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

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

pytest文档30-功能用例与自动化用例完美对接(allure)的更多相关文章

  1. pytest文档59-运行未提交git的用例(pytest-picked)

    前言 我们每天写完自动化用例后都会提交到 git 仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交 git 仓库的用例. pytest-picked 插件可 ...

  2. pytest文档50-命令行参数--durations统计用例运行时间

    前言 写完一个项目的自动化用例之后,发现有些用例运行较慢,影响整体的用例运行速度,于是领导说找出运行慢的那几个用例优化下. --durations 参数可以统计出每个用例运行的时间,对用例的时间做个排 ...

  3. pytest文档7-pytest-html生成html报告

    前言 pytest-HTML是一个插件,pytest用于生成测试结果的HTML报告.兼容Python 2.7,3.6 pytest-html 1.github上源码地址[https://github. ...

  4. Java导出freemarker实现下载word文档格式功能

    首先呢,先说一下制作freemarker模板步骤, 1. 在WPS上写出所要的下载的word格式当做模板 2. 把模板内不固定的内容(例:从数据库读取的信息)写成123或者好代替的文字标注 3. 把固 ...

  5. pytest文档3-pycharm运行pytest

    前言 上一篇pytest文档2-用例运行规则已经介绍了如何在cmd执行pytest用例,平常我们写代码在pycharm比较多 写完用例之后,需要调试看看,是不是能正常运行,如果每次跑去cmd执行,太麻 ...

  6. Taurus.MVC 2.3 开源发布:增强属性Require验证功能,自带WebAPI文档生成功能

    背景: 上周,把 Taurus.MVC 在 Linux (CentOS7) 上部署任务完成后. 也不知怎么的,忽然就想给框架集成一下WebAPI文档功能,所以就动手了. 以为一天能搞完,结果,好几天过 ...

  7. iDoc「文档」功能强势升级!一键分享,即刻预览!(201903-1版本更新)

    小摹很想知道小伙伴们在面对众多杂乱的文档时,都是如何管理起来的呢?iDoc的「文档」功能,很多小伙伴还没有用起来,甚至都没有注意到iDoc还有这样一个功能.今天小摹就给大家介绍一下iDoc的「文档」功 ...

  8. pytest文档15-使用自定义标记mark

    前言 pytest可以支持自定义标记,自定义标记可以把一个web项目划分多个模块,然后指定模块名称执行.app自动化的时候,如果想android和ios公用一套代码时, 也可以使用标记功能,标明哪些是 ...

  9. Taurus.MVC 2.3.2 :WebAPI 文档集成测试功能及附加<%# JS执行功能语法 %>

    前言: 前些天有网友提到了那个界面丑陋的SwaggerUI,让我想起了多年前实现的WebAPI文档未完成的功能点,于是,动手了,便有了本文的内容. 开源地址:https://github.com/cy ...

随机推荐

  1. 初学Python几个小程序练习

    使用格式化输出的三种方式实现以下输出(name换成自己的名字,既得修改身高体重,不要厚颜无耻) name = 'ABDMLBM' height = 175 weight = 140 # "M ...

  2. pycharm 设置django server

  3. OC方法交换swizzle详细介绍——不再有盲点

    原文链接:https://www.cnblogs.com/mddblog/p/11105450.html 如果对方法交换已经比较熟悉,可以跳过整体介绍,直接看常见问题部分 整体介绍 方法交换是runt ...

  4. 题解:T103180 しろは的军训列队

    题目链接 solution: 按题目随便假设找到了一个x,它的位置的ap,属性bp 看下图 $$$$$$$$$$$$$$$$|||||P &&&&&&& ...

  5. Codeforces Round #554 (Div. 2) D 贪心 + 记忆化搜索

    https://codeforces.com/contest/1152/problem/D 题意 给你一个n代表合法括号序列的长度一半,一颗有所有合法括号序列构成的字典树上,选择最大的边集,边集的边没 ...

  6. 【2019.7.22 NOIP模拟赛 T1】麦克斯韦妖(demon)(质因数分解+DP)

    暴力\(DP\) 先考虑暴力\(DP\)该怎么写. 因为每个序列之后是否能加上新的节点只与其结尾有关,因此我们设\(f_i\)为以\(i\)为结尾的最长序列长度. 每次枚举一个前置状态,判断是否合法之 ...

  7. 物联网架构成长之路(33)-EMQ数据存储到influxDB

    一.前言 时隔一年半,技术变化特别快,学习也要跟上才行.以前写过EMQ数据转存问题,当时用了比较笨的方法,通过写插件的方式,把MQTT里面的数据发送到数据库进行存储.当时也是为了学习erlang和em ...

  8. SQL Server in Docker - 还原数据库

    SQL Server in Docker 还原数据库 上一会演示了如果在Docker环境下安装SQL Server,这次我们来演示下如何还原一个数据库备份文件到数据库实例上. 使用winscp上传ba ...

  9. 【题解】Puzzle [Uva1399]

    [题解]Puzzle [Uva1399] 传送门:\(\text{Puzzle [Uva1399]}\) [题目描述] 给定 \(m\) 和 \(n\),表示有 \(m\) 种不同的字符(大写字母\( ...

  10. My time is limited

    Your time is limited, so don't waste it living someone else's life. Don't be trapped by dogma - whic ...