python实现测试工具(二)——简单的ui测试工具


Posted in Python onOctober 19, 2020

本系列教程使用的python版本是3.6.3。

背景

这一节我们实现一个简单的ui测试工具。

该工具的作用是访问某个页面,然后根据css选择器去定位页面上的元素,最后判断页面上元素的个数与我们的预期是否相符。

举一个具体的例子,比如我们去访问www.itest.info这个页面,我们需要判断页面上class = thumbnail-img的元素存在,并且有4个。因为每一个元素代表一门课程,所以这个断言的意思是重定向科技主页上应该有4门主要课程。

视频讲解在这里。

工具设计

我们设计一个命令行工具,给工具传3个参数。

  • 被访问页面的url
  • 页面上元素的css选择器
  • 预期的元素数量,页面上可以存在n个元素,如果传入0,则表示元素不存在,做反向断言

所以工具大概是这样用的: python script_name.py url css_selector length

代码实现

简单起见,我们会用到requests-html库。安装文档在这里。

from requests_html import HTMLSession
from sys import argv
DEBUG = True

USAGE = '''
USAGE:
python html_assertion.py www.itest.info .thumbnail-img 4
'''

if len(argv) != 4:
 print(USAGE)
 exit(1)

script_name, url, css_selector, length = argv

if url[:4] != 'http':
 url = 'http://' + url

session = HTMLSession()
r = session.get(url)

elements = r.html.find(css_selector)


def debug():
 if DEBUG:
  print('*' * 100)
  print(f"css选择器: {css_selector}, 共找到{len(elements)}个元素\n")
  for element in elements:
   print(element.html)
   print(element.attrs)
   print()


if len(elements) != int(length):
 print(f"失败! 预期{length}个元素,实际存在{len(elements)}个元素\n")
 debug()
 exit(1)
else:
 print(f"成功!\n")
 debug()

精讲

用例失败之后使用exit(1)表示异常退出,这样在使用jenkins运行的时候,用例失败jenkins的job结果也会相应失败
requests-html库的基本使用参考这里

运行示例

# 失败情况
python html_assertion.py www.itest.info .thumbnail-img 1
失败! 预期1个元素,实际存在4个元素

****************************************************************************************************
css选择器: .thumbnail-img, 共找到4个元素

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/7/mission_impossible_cut.jpg"/></div><a class="btn-more hover-effect" href="/courses/7" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/6/120606ineam4nspdc6qdaw.jpg"/></div><a class="btn-more hover-effect" href="/courses/6" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/3/12.jpg"/></div><a class="btn-more hover-effect" href="/courses/3" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/2/13.jpg"/></div><a class="btn-more hover-effect" href="/courses/2" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

# 成功情况
python html_assertion.py www.itest.info .thumbnail-img 4
成功!

****************************************************************************************************
css选择器: .thumbnail-img, 共找到4个元素

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/7/mission_impossible_cut.jpg"/></div><a class="btn-more hover-effect" href="/courses/7" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/6/120606ineam4nspdc6qdaw.jpg"/></div><a class="btn-more hover-effect" href="/courses/6" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/3/12.jpg"/></div><a class="btn-more hover-effect" href="/courses/3" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

<div class="thumbnail-img"><div class="overflow-hidden"><img class="img-responsive" src="/uploads/course/image/2/13.jpg"/></div><a class="btn-more hover-effect" href="/courses/2" rel="external nofollow" rel="external nofollow" >更多</a></div>
{'class': ('thumbnail-img',)}

动手时间

  • 抄一遍代码,看自己能不能运行起来
  • 给这段代码每一行都加上注释,理解代码做了些什么

扩展阅读

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors

源码地址

github地址

以上就是python实现测试工具(二)——简单的ui测试工具的详细内容,更多关于python ui测试的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python用10行代码实现对黄色图片的检测功能
Aug 10 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
python pexpect ssh 远程登录服务器的方法
Feb 14 Python
pandas.read_csv参数详解(小结)
Jun 21 Python
python实现动态创建类的方法分析
Jun 25 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
pytorch 获取tensor维度信息示例
Jan 03 Python
使用python采集Excel表中某一格数据
May 14 Python
python异常处理之try finally不报错的原因
May 18 Python
python3中TQDM库安装及使用详解
Nov 18 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 #Python
基于Python制作一副扑克牌过程详解
Oct 19 #Python
Python实现壁纸下载与轮换
Oct 19 #Python
Python调用REST API接口的几种方式汇总
Oct 19 #Python
Python爬虫抓取论坛关键字过程解析
Oct 19 #Python
python MD5加密的示例
Oct 19 #Python
python Yaml、Json、Dict之间的转化
Oct 19 #Python
You might like
php变量作用域的深入解析
2013/06/03 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
jQuery 前的按键判断代码
2010/03/19 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
node.js适合游戏后台开发吗?
2014/09/03 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
单位消防安全制度
2014/01/12 职场文书
校园歌手大赛策划书
2014/01/17 职场文书
董事长岗位职责
2015/02/13 职场文书
应聘教师自荐信
2015/03/26 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
寒假致家长的一封信
2015/10/10 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS