python pytest selenium 自动化测试框架搭建

python pytest selenium 自动化测试框架搭建

     公司一直有这个自动化测试需求,前期利用c++或者python进行了一些自动化脚本的编写。这几天没有版本更迭,基于前期的工作,把自动化测试整理了一部分功能模块。现在的状态基本达到预期:即搭建了一个AutoTest框架,基于此实现了login、设备管理两个模块的自动化测试,并基于实际,进行了合理的wait优化,后期的工作就是继续完善其它模块的内容。截止2020年7月1日11:41:37,该架构,可实现模块自动化测试、html报告输出、log日志输出。部分设计、方法取于网络。

     写一篇详细一点的,完整搭建web端自动化测试的过程出来。其中包含自动化从分析到落地的全过程。

以下为主要的几个时间节点。

1.自动化的可行性分析。√2020年2月28日14:12:28已完成。
2.自动化可测试内容明确。√2020年2月28日14:12:43已完成
3.自动化测试用例设计注意事项。√2020年2月28日15:12:47 已完成。
4.AT测试工具、语言、结构确定。√2020年7月1日09:09:16 已完成。python做基础。pytest做框架。selenium为方法
5.开始编写testcase。ing 已完成login以及manage-vehi模块已完成。包含html报告生成、log生成。
6.需要解决两个问题。sleep过多。导致执行效率慢 √2020年7月1日11:35:01 已完成,由于项目内web无特殊控件加载需要特别长时间,暂时只使用了隐式wait

1、自动化可行性分析

   此部分主要进行公司内部各项目的自动化可行性分析。这部分我主要大体上考量了作用域、优劣、适用项目。

结合项目实际,确定自动化可适用初步结论。

 

2、自动化可测试内容明确

          这一部分主要是结合测试项目的测试用例或者功能点。逐条进行初步的能否进行自动化处理的判定,进而整理出AT自身的测试用例。当然必要时可进行测试组内部的评定,用例编写完毕可进行项目内评审,以便查缺补漏。

         基于人工测试编写的测试用例,往往只有一部分适用于自动化测试。而人工测试时考量到测试时间,会存在一些未详细测试的功能项(如login时的多种情况),通过自动化能够进行处理,而不需要担心后期执行用例会消耗的时间。

         以下是基于原有项目测试用例模块,初步细化后的一条 AT测试用例 截图。内容较为简单。当前阶段只需要基于原有用例进行“能否AT的初步判定”,不需要进行进一步的细化。

 

3.自动化测试用例设计注意事项

       我一直觉得用例设计应该放在前面,所以在这个阶段,就结合网络资料明细了自动化测试用例需要考虑的几个点。总结起来为四点:独立执行、重复执行、减少依赖、提高效率。

至此,我们明确了可执行自动化测试的功能点。也懂得了自动化测试用例的一些关键点。我选择了login模块,和一个项目业务相关的一个管理模块进行功能点简单细分,效果就是前面的用例截图。从图中可以看到在测试方法后者步骤,是定义了input、output、check项、recover方法等四个内容。

 

4.自动化测试框架设计

     之前有一些python编程基础,以及selenium程序+firefox的录制经验。但是到这个阶段,我对自动化测试的框架理解还是只有10%。所以决定做一个自动化框架及所用模块的网络调研。大体了解一下。用了xmind软件。梳理思路。

包含:

“为什么要用框架”、

“框架包含哪些内容”、

“应该选择哪种框架,市面上有哪些框架,分别针对那种测试对象。”、

“目前主流是什么?最新是什么?准备尝试什么”、

以及最后的“python+pytest+selenium框架搭建”流程计划

现在回过头来看,整理出来的东西还是模模糊糊的。不过对于落地不会有太大影响。

 

      明确出来了需要使用的模块、以及搭建过程、甚至于后期规划的CI。但是以上对于要AT测试落地还有一节。下一阶段就是代码搭建了。python做基础。pytest做框架。selenium为方法。

明细了以下几点:

编程语言确定:python3。简单易上手。插件多。

框架确定:pytest的python插件。最新,兼容高。

方法确定:selenium的python插件,由于是web自动化,所以就是用的selenium。

在下一阶段前,你应当确认一下条件以便更好进入AT代码用例编写。

1.系统应当具备python3环境。https://www.python.org/downloads/  我用的python3.7

2.系统应当以安装pycharm环境。以便于调试。官网下载试用版30天。

3.系统应安装chrome、ie或者firefox浏览器合适的版本。

4.你应当了解浏览器对应的driver驱动版本。并将它们下载下来。

版本对应关系:https://blog.csdn.net/qq_28284093/article/details/81938789

http://selenium-release.storage.googleapis.com/index.html?path=4.0-alpha-5/

http://chromedriver.storage.googleapis.com/index.html

https://github.com/mozilla/geckodriver/releases

5.selenium定位元素的几种方法。

##############################################################元素定位########################################################################
1.元素定位方法
F12,点击弹出的代码查看栏左上角符号:“select an element in the page to inspect it”。而后再点击你想查询的元素即可定位html代码中的元素参数信息。
############################################################元素定位##########################################################################
2.元素定位方法
id定位: driver.find_element_by_id('kw').send_keys('selenium')
name定位:driver.find_element_by_name('wd').send_keys('selenium')
class定位:driver.find_element_by_class_name('s_ipt').send_keys('selenium')
link定位:driver.find_element_by_link_text('新闻').click()
partial_link定位(模糊定位):driver.find_element_by_partial_link_text('闻').click()
xpath定位(万能定位):driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium')
获取xpath的方法:chrome F12,左上角符号定位element,在html代码行中右键copy,选择xpath即可得到xpath路径。但是ie和chrome可能获取的xpath不同。(当产品默认为ie时)
                ie目前上没有公布的xpath插件。
CSS定位:driver.find_element_by_css_selector('#kw').send_keys('selenium')

6.如何获取元素的xpath(绝对路径)。https://www.cnblogs.com/puresoul/archive/2012/10/04/2711372.html

 

5.AT测试之代码架构

     框架梳理主要来源于这篇文章:https://blog.csdn.net/haoxun06/article/details/104383331

     由于涉及到项目内容,代码不公示。接下来的代码编写,需要一点编程知识。过程中遇到的问题,网上基本都有解决方法

     画红框为在用的框架结构。test_suit中为已编写好的两个模块(login、设备管理)的用例集合。

   用的Gitee来实现代码管理。结果用得不熟练,把我早上的终版代码貌似搞丢了。。。。终端代码主要优化了执行效率。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

热门文章

暂无图片
编程学习 ·

springboot+idea+bootstrap的带有图片的表格编辑操作

前面已经写了 批量导入,图片显示,现在写的是批量修改,后面会写用echarts+springboot 做折线图,有时间贴上 1、jsp代码如下,编辑按钮formatter: function (value, row, index) {var edit = <input class="btn btn-primary" type="button" value=&qu…
暂无图片
编程学习 ·

在海外如何寻找蓝海市场

2010年左右,我国跨境进口零售电商企业开始逐渐出现,到2015年电商数量实现了爆发式的增长。当然,随后就开始进入红海时代,网易考拉海购、天猫国际、京东全球购、唯品国际、小红书、洋码头占领了大部分市场。 国内红海,那就出海。 红海、蓝海概念的提出,让更多的创业者积极…
暂无图片
编程学习 ·

java.lang.NullPointerException 自己踩过得坑 记录下来

java.lang.NullPointerExceptionjava.lang.NullPointerException 这个问题困扰了我好长时间 解答: 因为自己写的MybatisUtils工具类中 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 这句话中多写了一个 SqlSessionFactory , 因为…
暂无图片
中恒嘉业 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
郑州普通话 ·

[Redux/Mobx] 在Redux中怎么发起网络请求?

[Redux/Mobx] 在Redux中怎么发起网络请求&#xff1f; 如果单纯的使用Redux&#xff0c;因为redux的actionCreator返回一个plain object&#xff0c;所以不能在actionCreator中发起网络请求&#xff1b;reducer是一个纯函数&#xff0c;不能有副作用&#xff0c;所以也不能有异…
暂无图片
郑州普通话 ·

[Redux/Mobx] Redux和vuex有什么区别?

[Redux/Mobx] Redux和vuex有什么区别&#xff1f; 1&#xff1a;vuex的异步数据不需要使用到中件间&#xff0c;redux需要 2&#xff1a;vuex可以直接commit&#xff0c;action不是必须的&#xff0c;redux是必须的 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知…
暂无图片
代理记账 ·

[Redux/Mobx] 在Redux中怎么发起网络请求?

[Redux/Mobx] 在Redux中怎么发起网络请求&#xff1f; 如果单纯的使用Redux&#xff0c;因为redux的actionCreator返回一个plain object&#xff0c;所以不能在actionCreator中发起网络请求&#xff1b;reducer是一个纯函数&#xff0c;不能有副作用&#xff0c;所以也不能有异…
暂无图片
代理记账 ·

[Redux/Mobx] Redux和vuex有什么区别?

[Redux/Mobx] Redux和vuex有什么区别&#xff1f; 1&#xff1a;vuex的异步数据不需要使用到中件间&#xff0c;redux需要 2&#xff1a;vuex可以直接commit&#xff0c;action不是必须的&#xff0c;redux是必须的 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知…
暂无图片
cgfy ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
coreui ·

[Redux/Mobx] Redux和vuex有什么区别?

[Redux/Mobx] Redux和vuex有什么区别&#xff1f; 1&#xff1a;vuex的异步数据不需要使用到中件间&#xff0c;redux需要 2&#xff1a;vuex可以直接commit&#xff0c;action不是必须的&#xff0c;redux是必须的 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知…
暂无图片
未来博客 ·

[Redux/Mobx] Redux和vuex有什么区别?

[Redux/Mobx] Redux和vuex有什么区别&#xff1f; 1&#xff1a;vuex的异步数据不需要使用到中件间&#xff0c;redux需要 2&#xff1a;vuex可以直接commit&#xff0c;action不是必须的&#xff0c;redux是必须的 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知…
暂无图片
建站日记 ·

[Redux/Mobx] Redux和vuex有什么区别?

[Redux/Mobx] Redux和vuex有什么区别&#xff1f; 1&#xff1a;vuex的异步数据不需要使用到中件间&#xff0c;redux需要 2&#xff1a;vuex可以直接commit&#xff0c;action不是必须的&#xff0c;redux是必须的 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知…
暂无图片
mfbz ·

[Redux/Mobx] 在Redux中怎么发起网络请求?

[Redux/Mobx] 在Redux中怎么发起网络请求&#xff1f; 如果单纯的使用Redux&#xff0c;因为redux的actionCreator返回一个plain object&#xff0c;所以不能在actionCreator中发起网络请求&#xff1b;reducer是一个纯函数&#xff0c;不能有副作用&#xff0c;所以也不能有异…
暂无图片
mfbz ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
珊珊日记 ·

学习笔记六——循环神经网络

一、RNN 前馈神经网络&#xff1a;信息往一个方向流动。包括MLP和CNN 循环神经网络&#xff1a;信息循环流动&#xff0c;网络隐含层输出又作为自身输入&#xff0c;包括RNN、LSTM、GAN等。 RNN模型结构如下图所示&#xff1a; 展开之后相当于堆叠多个共享隐含层参数的前馈…
暂无图片
珊珊日记 ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法&#xff01; 拓扑排序的过程中&#xff0c;由于需要查找所有以某顶点为尾的弧&#xff0c;即找到该顶点的所有出边&#xff0c;故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同&#xff0c;由于要查找入度为0的点…