gauge自动化框架踩坑(三):上下文

一. 模板项目

姑且将模板中的项目成为为模板项目。上篇文章说过,这是一个关于英语中元音的项目,统计单词中包含几个元音

二. Contexts

注意到,example.spec文件中有下面几行,第11行的step表示上下文step

上下文,官网给出的解释是,一个或多个Context step位于一个spec文件中所有场景的前面。它是执行场景所必须的一个环节,上下文可以再场景运行前设置数据,还可以充当一个setup或teardown的功能。上下文在每个场景前面执行

在上述例子中,上下文step会作为Mike登录,跳转到项目页面,然后再去执行删除单个项目和删除多个项目的场景,执行顺序是:

场景一:
1. 作为Mike登录,跳转到项目页面
2. 删除单个项目

场景二:
3. 作为Mike登录,跳转到项目页面
4. 删除多个项目

给出的说明很好理解,其实有点类似于unittest中的setUpClass,环境的初始化。如果照我们前面说的,一个场景相当于一个类,这个有点类似于类的初始化__init__

回过头看模板项目的例子,有两个场景Vowel counts in single word和Vowel counts in multiple word,第一个场景中的step是The word "gauge" has "3" vowels.,第二个场景中的step是一张表,罗列了word和Vowel Count。其实可以这样理解,word实际上是方法的实参,而Vowel Count对应的值是这个实参对应的期望结果。这样就很好理解,为什么方法还要参数化:@step("The word <word> has <number> vowels."),而方法执行的结果则是实际结果,所以用了assert做断言

但是当我们看step_impl.py文件时,并不能真切感受到上下文的执行顺序,因为对于方法的定义完全是乱的,关于上下文的方法在第19-22行,而场景一的方法在第14-16行。这并不像setUpClass或__init__构造函数,在类内部其他方法的前面

 1 from getgauge.python import step, before_scenario, Messages
 2
 3 vowels = ["a", "e", "i", "o", "u"]
 4
 5
 6 def number_of_vowels(word):
 7     return len([elem for elem in list(word) if elem in vowels])
 8
 9
10 # --------------------------
11 # Gauge step implementations
12 # --------------------------
13
14 @step("The word <word> has <number> vowels.")
15 def assert_no_of_vowels_in(word, number):
16     assert str(number) == str(number_of_vowels(word))
17
18
19 @step("Vowels in English language are <vowels>.")
20 def assert_default_vowels(given_vowels):
21     Messages.write_message("Given vowels are {0}".format(given_vowels))
22     assert given_vowels == "".join(vowels)
23
24
25 @step("Almost all words have vowels <table>")
26 def assert_words_vowel_count(table):
27     actual = [str(number_of_vowels(word)) for word in table.get_column_values_with_name("Word")]
28     expected = [str(count) for count in table.get_column_values_with_name("Vowel Count")]
29     assert expected == actual
30
31
32 # ---------------
33 # Execution Hooks
34 # ---------------
35
36 @before_scenario()
37 def before_scenario_hook():
38     assert "".join(vowels) == "aeiou"

关于执行顺序,只有去查看测试报告才可以得到验证。测试报告中每一个场景运行之前都执行了一遍context step,这是很明显的

参考文章

https://docs.gauge.org/latest/writing-specifications.html#longstart-context

原文地址:https://www.cnblogs.com/cnhkzyy/p/11107368.html

时间: 2024-10-08 19:26:37

gauge自动化框架踩坑(三):上下文的相关文章

gauge自动化框架踩坑(四):在测试报告中自定义messages

在开始之前,我觉得很有必要介绍一下print和logger,因为平时调试用的最多的就是print和看日志,当然可以打断点调试,但是我不太习惯用这个 一. print gauge控制台输出到底支不支持print,其实自己可以写个demo,看来确实是支持的,不过控制台输出的有点乱,几乎和P紧挨着.其实gauge可以对print的结果标记个颜色区分下 二. logging 事实上,并没有任何的输出 gauge的日志做得不太好.它的输出日志是存放在logs/gauge.log下的,这里的日志非常简短,一

gauge自动化框架踩坑(六):关于csv

一. 语法 关于csv文件,官方文档只给出了语法,并没有举出实际的例子来说明,如何使用 语法:<table:[value]>,这里的<value>是csv文件的路径 中间困惑了一段时间,后来去官网的项目地址找到了gauge-example-python-master这个项目,才渐渐明白csv文件具体的使用方法 二. 使用方法 user.csv只有一列users,被定义在resources下面的user.csv文件中,它被作为table引用,只不过是<table:path>

网站移动版本开发踩坑实录三

鉴于本人在移动wap上的开发经验少,遇到的问题确实不少,很多问题都是为了项目紧急上线而不得已的写临时性的fixed的方案,所以解决方法也存在缺陷,这次记录的虽然没有什么高大上的东西,把几个明显的问题和解决过程记录下来. 1.ios系统浏览器事件会触发两次 问题发现于ipad.iphone上,起初遇到这个问题本以为自己在绑定了两次事件(touchstart click),但是由于最新的ipad对click事件不支持以及为了防止重复绑定事件,因此我特意处理了关于touchstart和click做了一

使用ABP框架踩过的坑系列1

诚如ABP的作者所说:We are creating different applications based on different needs. But implementing common and similar structures over and over again, at least in some level. Authorization, Validation, Exception Handling, Logging, Localization, Database Con

3分钟手把手带你搭建基于selenium的自动化框架

1 .什么是seleniumSelenium 是一个基于浏览器的自动化工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.Selenium WebDriver 和Selenium Grid: Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如java,python等)的形式导出成测试用例. Selenium WebDriver:提供Web自动化所需的API,主要用作浏览

TiDB 深度实践之旅--真实“踩坑”经历

美团点评 TiDB 深度实践之旅(9000 字长文 / 真实“踩坑”经历) 4 PingCAP · 154 天前 · 3956 次点击 这是一个创建于 154 天前的主题,其中的信息可能已经有所发展或是发生改变. 原标题:美团点评携手 PingCAP 开启新一代数据库深度实践之旅 一.背景和现状 在美团,基于 MySQL 构建的传统关系型数据库服务已经难于支撑公司业务的爆发式增长,促使我们去探索更合理的数据存储方案和实践新的运维方式.随着近一两年来分布式数据库大放异彩,美团 DBA 团队联合架构

MACACA自动化框架搭建

本文是基于Windows系统搭建macaca+python+Android框架的过程和踩坑记录(Linux的以后再研究),有兴趣的同学可以一起交流学习一下 macaca简介: https://macacajs.github.io/zh/environment-setup macaca是由阿里巴巴公司开发的一套自动化解决方案,开源地址:https://github.com/macacajs/ 其适用于PC端和移动端 基本环境: JDK的安装及环境配置:(1.8) Node.js的安装及环境配置:(

Java踩坑之路

陆陆续续学Java也快一年多了,从开始的一窍不通到现在的初窥门径,我努力过,迷茫过,痛过,乐过,反思过,沉淀过.趁着新年,我希望能把这些东西记下来,就当是我一路走来的脚印. 一.初识网站应用 记得第一次接触Java,是写一个小网站,当时用servlet+tomcat做服务端,数据库是mysql.那时我对于网站应用的概念一片空白,之前接触的都是C++和MFC写桌面程序.我花了一周时间看完了<java servlet programming>这本书,然后我就开始写代码了.但是,真的当我写代码的时候

踩坑(Running)填坑(ZSSURE):DevExpress的XtraTabControl、Telerik的OpenAccessContext以及StarUML

题记: 今天好友在朋友圈分享了一篇有深度的好文"请鼓励你的孩子做个幸福普通人",文章略显长,细细品读下来感触颇多.加之最近天天看着小外甥大睿睿的一步步的成长,已渐渐远离年轻稚嫩.走向成熟稳重的我对学习有了新的认识,回想起自己的成长过程,经验和技能并非是父母手把手教导的,反而是他们给我营造的"自由.开放.甚至略显放纵"的环境.他们以身作则的行动,让我从中体会.感悟出了所有的点点滴滴. 说到现在从事的软件研发工作,想想同学中毕业鲜有留下来做技术的(姑且认为IT民工也属于