seldom 是我一直在维护的自动化测试框架。目前GitHub已经 500+ star。

最近在项目中使用Seldom + poium 编写自动化测试用例。接下来,我就分享一些使用技巧。

如何参数化测试用例

网站的首页,如上面的导航。于是,开始利用poium编写元素定位。

from poium import Page, Elementclass Homepage(Page):destination_hk = Element(cass='#id_2&ext', describe="探索目的地-香港")destination_macau = Element(css='#id_3&ext', describe="探索目的地-澳门")destination_singapore = Element(css='#6&ext', describe="探索目的地-新加坡")...

写着写着,我发现这样的用例不可维护,因为这里的导航是由后台配置出来的一个导航,热门目的地不是固定的,随国家、语言变化。

修改用例如下:

# page
from poium import Page, Elementsclass Homepage(Page):destination_all = Elements(xpath='//div/div/', describe="所有热门城市")# case
import seldomclass TestHomeNav(seldom.TestCase):"""导航"""def start(self):self.open("https://www.shop.com/")self.hp = HomePageCN(self.driver)def test_nva_search(self):# 遍历城市列表,点击每一个城市destinations = self.hp.destination_allfor elem in destinations:elem.click()

那新的问题来了,这么写就一条用例,而且,假设其中一个城市配置链接错误或失效,整个用例失败,我们很难排查是哪个城市的问题,而且也不利于用例统计。

最后,改进之后的方案。

# page
from poium import Page, Elementsclass Homepage(Page):destination_all = Elements(xpath='//div/div/', describe="所有热门城市")# common
def get_destinations_data(url):"""获得热门目的地的 数量:return: [(),()]"""hp = HomePage(Seldom.driver)hp.open(url)destinations = hp.destination_alldestinations_data = []for i, elem in enumerate(destinations):destinations_data.append((elem.text, i))return destinations_data# case
import seldom
from seldom import database_url = "https://www.shop.com/"class TestHomeNav(seldom.TestCase):"""导航"""def start(self):self.open(base_url)self.hp = HomePage(self.driver)@data(get_destinations_data(base_url))def test_nva_search(self, name, i):# 探索目的地print("city name-->", name)destinations = self.hp.destination_allcity_name = destinations[i].textdestinations[i].click()self.assertText(city_name)

这种方案有两个好处。

  1. 城市列表变动,不会影响用例的执行。
  2. 每个城市统计一条用例。

seldom基于unittest的参数化非常简单和强大,这也是我没有转投pytest的最主要原因之一。 pytest的参数化@pytest.mark.parametrize()确实不好用,这一点不接受反驳。

用例依赖

这一条用例是我要自动化点击搜索历史搜索历史搜索过​才会产生的数据。

# case
import seldom
from seldom import data
from seldom import dependclass TestHomeSearch(seldom.TestCase):"""搜索"""def start(self):self.open(base_url)self.hp = HomePage(self.driver)@data([("case1", "迪士尼"),("case2", "双月湾"),("case3", "上海"),])def test_search_a_keyword(self, name, keyword):"""搜索:活动、城市"""print("case name-->", name)self.hp.search_input.send_keys(keyword)self.hp.search_button.click()self.assertText(f"以下是与“{keyword}”相关的体验")@depend("test_search_a_keyword")def test_search_history(self):"""搜索:点击搜索历史"""history = self.hp.search_historykeyword = history[0].texthistory[0].click()self.assertText(f"以下是与“{keyword}”相关的体验")
  1. 搜索再次用到了参数化。
  2. 通过@depend() 装饰器设置依赖上面的用例test_search_a_keyword,当被依赖的用例失败时,该用例直接跳过。

UI + 接口自动化混搭验证

Seldom既支持Web UI自动化,又支持接口。

例如,上面的活动卡片,如何验证图片是否显示。

  • 截图对比

    1. 提前准备一张对比的图片,太麻烦,存在对比偏差,活动有被替换的风险。
    2. 自动截图,人工检查截图,这不叫完全自动化。
    3. 跑自动化的时候,测试人员盯着看... 这就很离谱了。
<img src="https://gimg2.baidu.com/i/eg_tulip.jpg"  alt="雪山" />

先来看看一张图片的定义。如果一张图片无法显示。

  1. html 代码写错,例如 src 写成 scr
  2. 图片链接失效。

第一种情况概率很低,而且很容易发现,而且是必现。第二种情况就比较麻烦了,可能图片链接一开始是好的,可能因为图片服务器问题导致图片丢失。

好了,分析完图片不可见的情况。那么就可以通过验证图片请求来保证图片是可见的。

import seldomclass TestHomeActivity(seldom.TestCase):def start(self):self.open(base_url)self.hp = HomePageCN(self.driver)def test_hot_sale_activity(self):"""检查活动活动 图片"""img = self.hp.activity_img.get_attribute("src")self.get(url=img)  # 调用图片链接self.assertStatusCode(200)  # 断言活动图片是否可以访问

通过get_attribute() 获取元素的src 图片链接,然后,直接self.get()调用图片地址,如果返回200 说明图片可访问。

是不是web UI和 接口自动化无缝连接。

最后:

https://github.com/SeldomQA/seldom

提供一下GitHub地址,如果有GitHub帐号,欢迎+ star,最近在使用过程中也在更加积极的完善功能和修复bug。如果你正在开展自动化测试,不妨试试Seldom,他降低了你自己搭建自动化测试项目的成本,提高你编写和维护用例的速度。

seldom 实战技巧相关推荐

  1. (20/24) webpack实战技巧:watch实现热打包和添加代码备注

    (20/24) webpack实战技巧:watch实现热打包和添加代码备注 在前面的学习中,我们一直使用webpack-dev-server充当(本地)服务器和完成打包任务,但是当出项目团队联合开发, ...

  2. Android实战技巧之十一:Android Studio和Gradle

    2019独角兽企业重金招聘Python工程师标准>>> 经过两个多月的AS体验,我认为是时候将Android的开发环境迁移到AS上了.目前最新版本是1.0.2(大年30当天升级到1. ...

  3. 【直播课】6小时教你熟知Anchor free理论基础,掌握项目实战技巧

    前言 目标检测是计算机视觉和数字图像处理的一个热门方向,广泛应用于机器人导航.智能视频监控.工业检测.航空航天等诸多领域,通过计算机视觉减少对人力资本的消耗,具有重要的现实意义.因此,目标检测也就成为 ...

  4. (23/24) webpack实战技巧:如何在webpack环境中使用Json

    (23/24) webpack实战技巧:如何在webpack环境中使用Json 在webpack1或者webpack2版本中,若想在webpack环境中加载Json文件,则需要加载一个json-loa ...

  5. php进阶面向对象及tp5,TP5实战技巧---开发思路 引路造桥

    ## TP5实战技巧实例---开发思路 > 子曰:"学而不思则罔,思而不学则殆." [TOC] ### 利用TP的MVC框架 做快速开发 >[success] 写在前面 ...

  6. apex英雄机器人探路者怎么玩_Apex英雄探路者机器人实战技巧攻略[多图]

    Apex英雄探路者机器人其定位是辅助型角色,关于该角色要正确的使用Q技能抓钩,将敌人抓住即可,那么详细的实战技巧如何呢,就让嗨客小卷子来告诉大家吧! 探路者机器人使用技巧分享 探路者(PathFind ...

  7. css揭秘实战技巧 - 形状 [二]

    全目录 本系列文章,主要是围绕css3属性,实现我们常见的各种效果,这些效果都是我们实战开发中经常可以用到的效果: css揭秘实战技巧- 背景与边框 [一] css揭秘实战技巧- 形状 [二] css ...

  8. aspose excel中文文档_Excel实战技巧,如何将阿拉伯数字快速转换为中文大小写格式?...

    Hi,大家好,我是小雨!应诸多网友的需求,从今天起小雨每天为大家讲解一个办公软件(Word.Excel.PPT)实战技巧. 第 001 期:如何将阿拉伯数字快速转换为中文大小写格式 Excel最强大的 ...

  9. python如何确定拐点_如何确认均线拐点的实战技巧和理论(图解)

    如何确认均线拐点的实战技巧和理论(图解) 投资是长久的事情,以饱含学习的思维去看待投资,你的投资路才能够越走越远. 一.MA指标使用原理 例如5天以来的投资者持筹成本就是把第1天到第5天的价格加起来除 ...

最新文章

  1. android开发环境建立以及开发工具的使用--怎样使用eclipse来开发android源码
  2. GBin1分享:jQuery新手技巧之“避免过多使用$('.someclass')”
  3. 交换机自动学习vlan
  4. 全卷积神经网路【U-net项目实战】肺结节分割案例分析:DSB3Tutorial
  5. 交换机端口安全如何部署
  6. 浅谈计算机硬件维护 论文,浅谈计算机硬件维护的论文(2)
  7. MySQL引擎详解(一)——引擎基本原理和操作
  8. MapGIS二调数据裁剪工具
  9. 收银系统 mysql数据库_解决哗啦啦收银系统数据库备份问题
  10. oracle 启动报错03113,Oracle 入门之Oracle启动报错“ORA-03113”
  11. js计算当前周数及每周具体日期、每月的第一个周一
  12. VMware Workstation虚拟机无法运行
  13. Java中对象方法的调用过程动态绑定(Dynamic Binding)
  14. 春节攻防战即将打响,想要弯道超车的商家们,准备好了吗?
  15. NOI / 1.13编程基础之综合应用 21:最大质因子序列
  16. 优麒麟 20.04 pro更换内核
  17. Unity3D学习笔记8——GPU实例化(3)
  18. 宏观经济学_宏观经济指标
  19. 【UEFI基础】UEFI事件介绍
  20. Servlet初识了解和应用

热门文章

  1. POWERLINK协议源码(最新)在stm32单片机上的移植指南
  2. elementUI的notify的click事件
  3. latex宏包特殊符号集锦
  4. 有效等价类处理用NextDate函数,x、y、z分别赋值给Date1的年月日,来达到日期增加三天的目的。细则是2月份和12月份是比较特殊的:二月份他有可能是有28天,也有可能有29天;12月份,它一过
  5. 香港cors网数据下载
  6. “五个女博士”被立案调查!北大曾发声明撇清关系
  7. Python自动化办公,深度优先搜索文件夹并移动全部doc文件(深度优先算法)以及(文件、文件夹的移动、复制、删除、重命名)
  8. 云原生(一) | 介绍篇之大数据需要拥抱云原生吗?云原生为什么这么火?
  9. scrapyd scrapyd.conf配置详情
  10. 【第一更】WEB系统版本及自动更新管理系统