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实现拼接多张图片的方法
Dec 01 Python
Python中用Spark模块的使用教程
Apr 13 Python
Python及PyCharm下载与安装教程
Nov 18 Python
Python实现连接postgresql数据库的方法分析
Dec 27 Python
pyqt5自定义信号实例解析
Jan 31 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
python3实现单目标粒子群算法
Nov 14 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
Python configparser模块常用方法解析
May 22 Python
Django返回HTML文件的实现方法
Sep 17 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 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
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
PHP序列化操作方法分析
2016/09/28 PHP
使用PHP开发留言板功能
2019/11/19 PHP
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
如何使用Vuex+Vue.js构建单页应用
2016/10/27 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
python之mock模块基本使用方法详解
2019/06/27 Python
python脚本后台执行方式
2019/12/21 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
python读取mysql数据绘制条形图
2020/03/25 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
办公室主任主任岗位责任制
2014/02/11 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
安全生产会议制度
2015/08/06 职场文书
XX部保密工作制度范本
2019/08/27 职场文书