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解析模块(ConfigParser)使用方法
Dec 10 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 Python
Python数据类型详解(三)元祖:tuple
May 08 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
Python多线程原理与用法实例剖析
Jan 22 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
利用python中集合的唯一性实现去重
Feb 11 Python
详解Django中异步任务之django-celery
Nov 05 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
中英文字符串翻转函数
2008/12/09 PHP
需要发散思维学习PHP
2009/06/29 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
js字符编码函数区别分析
2008/06/05 Javascript
一些技巧性实用js代码小结
2009/10/14 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
jQuery 改变P标签文本值方法
2018/02/24 jQuery
vue中使用protobuf的过程记录
2018/10/26 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
python批量创建指定名称的文件夹
2019/03/21 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
python装饰器代码深入讲解
2021/03/01 Python
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
周鸿祎:教你写创业计划书
2013/12/30 职场文书
大学生毕业求职自荐书范文
2014/02/04 职场文书
机关节能减排实施方案
2014/03/17 职场文书
大学新生入学教育方案
2014/05/16 职场文书
励志演讲稿大全
2014/08/21 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书