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实现的各种排序算法代码
Mar 04 Python
python局域网ip扫描示例分享
Apr 03 Python
python比较两个列表是否相等的方法
Jul 28 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
Jan 07 Python
Windows下python2.7.8安装图文教程
May 26 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
使用keras实现Precise, Recall, F1-socre方式
Jun 15 Python
Python类成员继承重写的实现
Sep 16 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防止post重复提交数据的简单例子
2014/06/07 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
2010/06/07 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
Python兔子毒药问题实例分析
2015/03/05 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
python空元组在all中返回结果详解
2020/12/15 Python
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
申请任职学生会干部自荐书范文
2014/02/13 职场文书
优秀实习生感言
2014/03/01 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
员工离职通知函
2015/04/25 职场文书
2015年征兵工作总结
2015/07/23 职场文书
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js