Python—UI自动化完整实战】的更多相关文章

前言 上篇文章[(appium+python)UI自动化_08_unittest编写测试用例]讲到如何使用unittets编写测试用例,并执行测试文件.接下来讲解下unittest如何批量执行测试文件并生成测试报告. 简单实例 实例讲解 一. 项目路径获取 project_name:项目名称,需更换为自己项目的名称 project_path:项目路径,获取思路 os.path.abspath(__file__):获取当前文件路径 split(project_name)[0]:通过项目名切割出项目…
前言 初学UI自动化的小伙伴,在配置好appium+python自动化环境后,往往不知道如何下手实现自动化.小编在初期学习的时候也有这种疑惑,在此以叮咚买菜app-搜索加车为实例,展示下appium是如何实现自动化的. 前提:已安装配置好appium+python自动化环境 一.连接手机启动app 1,连接手机 -手机USB连接电脑 -手机打开开发者模式.USB调试功能 2,基础信息配置 基础连接信息如下(以叮咚app为例): 'platformName': 操作平台'deviceName':…
Appium简介 Appium是一个开源的.跨平台的测试框架,主要用来进行app UI自动化,适用于原生应用.混合应用和移动网页应用(H5页面).目前支持Python.JavaScript.Objective C.Java.Ruby.PHP.C#等多种语言. python+appium环境搭建 1,配置python环境 如何在Mac上配置python环境在以前的文章中有记录过,这里就不展开说明啦,有需要的可参考小编的文章:Mac版-python环境配置(一):Python下载安装.Mac版-py…
python+selenium写UI自动化的时候,经常会遇到需要切换iframe的情况,这里介绍几种切换iframe的方式 1.使用id定位 driver.switch_to.frame("id") 2.使用index定位 driver.switch_to.frame(index) 3.使用name定位 driver.switch_to.frame("name") 如果iframe既没有id也没有name属性,通过index也不好判断需要切换的iframe,那么需要…
前言 在UI自动化过程中,需要对手机app上的元素进行定位,然后进一步编写自动化脚本操作app.定位元素首先需要定位工具来辅助查看页面元素.小编常用的定位工具有2种,分别是uiautomatorviewer.appium inspector. uiautomatorviewer 是Android sdk 自带的定位工具,元素层级展示清晰,但是定位不到内嵌H5页元素.appium inspector是appium上自带的定位功能,元素层级展示不够清晰,查看元素不够方便,但是可以定位到内嵌H5页元素…
做ui自动化的最基础的就是页面元素定位了,如果连页面元素都定位不到,自动化从何谈起呢?接下来我们就看看页面元素定位的方法吧!(这里就用百度页面来进行演示) 一.最通用的几种定位方式: 1.通过id定位 driver.find_element_by_id('su') 2.通过name定位 driver.find_element_by_name('mp') 3.通过class属性 driver.find_element_by_class_name('s_ipt') 4.通过文本链接 driver.f…
脚本思路: 使用pageobject模式,写一个basepage基类,所有页面的通用方法封装到基类中.比如打开页面,关闭页面,等待时间,鼠标移到元素上,获取单个元素,获取一组元素,获取元素的子元素,截图等等. 项目中的测试页面page1和page2都继承自basepage基类.可使用基类定义的方法.基类里会将webdriver和page合二为一,既将webdriver的操作改写成page的方法. 新建一个包pageclass > 分别新建basepage.page1.page2三个python文…
该部分记录如何获取预期结果-接口响应数据,分成两步: 1 获取数据源接口数据 2 提取后续页面对比中要用到的数据 并且为了便于后续调用,将接口相关的都封装到ProjectApi类中. 新建python包:apiclass > 新建python file:api_fund.所有接口相关的操作均放到该文件中.隐去项目相关信息后的代码如下: 1 获取数据源接口数据 # coding:utf-8 import requests from common.round_rewrite import round…
首先说说为什么想起来用自动化脚本来实现该项目的自动化. 工作还是以手工测试为主,业务驱动型的项目大概就是这样,业务不停地变,不断的迭代. 自动化测试实施的先决条件: 一 得有时间. 如果有时间大部分的项目都可以实现自动化,这是毋庸置疑 的.不过一般公司的手工测试岗位测试任务之繁重做过的同学应该有体会.我自己负责五个产品线的迭代版本,不得一刻空闲,几乎每天都埋在业务测试中. 二 得有必要. 成本与效率之间很多时候在我所经历的项目中会倾向于手工测试,可以说是严重倾向于手工测试. 大部分迭代版本手工测…
添加配置文件写入测试地址等,当环境切换时只需修改配置文件即可. 1 在项目目录下添加文件 config.ini 写入: [Domain] domain = http://test.domain.cn 2 项目目录下添加python文件 read_config.py 写入: #coding:utf-8 """ 读取同一目录下的配置文件 """ import configparser import os class EnvConfig: dir =…
使用python自带的unittest测试框架,用例继承自unittest.TestCase类. 1 引入接口类和页面类 2 setUp函数中打开页面,定义接口对象 3 tearDown函数中关闭页面 4 test打头的函数都是用例.因页面和接口的相关方法都已封装好,所以用例会比较简洁. 5 当一个用例需根据参数不同执行多次时,可使用ddt数据驱动,或unittest自带的subTest. # coding:utf-8 """ 页面2的测试用例 ""&qu…
使用python自带的unittest测试框架,用例继承自unittest.TestCase类. 1 引入接口类和页面类 2 setUp函数中打开页面,定义接口对象 3 tearDown函数中关闭页面 4 test打头的函数都是用例,预期结果和实际结果对比使用unittest自带的断言.因页面和接口的相关方法都已封装好,所以用例会比较简洁. 5 当一个用例需根据参数不同执行多次时,可使用ddt数据驱动,或unittest自带的subTest. 6 注意test05_click_btn(). 点击…
该部分记录测试页面2-StrategyPage,所有页面2上的元素定位.操作.获取属性等方法都写在该类中. 1 页面2继承自BasePage: 2 页面2第一部分写的是所有的定位器 3 页面2第二部分类的方法,包括提取页面元素,页面元素的操作.获取属性.验证元素属性正确性等 4 当用例中需要用到该页面的某元素或操作时,补充方法到该类中,再在用例中调用 5 页面数据最后要与接口对比,需要将接口类和页面类返回的值数据类型等进行统一,方便用例的编写. #coding:utf-8 ""&quo…
测试需求: 项目包含两个数据展示页面,数据均来自于四个数据源接口. 测试操作步骤: 选择5个大类型中的一个,每个大类型下有3个子类型,选择任一子类型,页面数据更新.需验证页面上的数据与数据源接口数据一致. 自动化必要性: 1 更新频率:接口数据每天更新 2 数据量:单个子类型页面的数据量较大 ,且需全量覆盖15个子类型的数据验证 测试思路:分别获取页面和接口数据,对比是否一致 dinghanhua 2019-01 一 获取接口数据 [预期结果] --requests --发送请求,获取响应 --…
使用简单的unittest.TextTestRunner. 思路: 1 在report目录下创建当日测试报告目录 20190113 2 创建测试报告文件 f = 时间戳.txt 3 加载测试集,运行测试,测试结果unittest.TextTestRunner(stream=f)保存到文件中 项目目录下新建run_test.py文件,写入代码: # coding:utf-8 import unittest from testcase import testcase_index,testcase_s…
想知道测试脚本运行到了哪一步,在脚本内关键节点处打日志是一个很好的方法.目前只写最简单的方式,logging相关还需要继续深入. 1  引包,并配置info级别以上的都显示 import logging;logging.basicConfig(level=logging.INFO) 2 在脚本需要的地方写日志: logging.info("当前策略:%s_%s"%(self.selectedStrategyName,self.strategycode)) logging.info(&q…
该部分记录测试页面1-IndexPage,所有首页上的元素定位.操作.获取属性等方法都写在该类中. 1 首页类继承自BasePage 2 首页类第一部分写的是所有的定位器 3 首页类第二部分类的方法,包括提取页面元素,页面元素的操作.获取属性.验证元素属性正确性等 4 当用例中需要用到该页面的某元素或操作时,补充方法到该类中,再在用例中调用 5 函数名:open打头的表示 打开页面,get_表示获取页面元素或属性,check_表示验证页面数据是否一致,choose_表示元素选择,click_点击…
前提:需先安装配置好appium+python自动化环境,已配置好环境的小伙伴可以参考以下步骤启动Android app,具体步骤如下: 一.USB连接手机 (1)手机USB连接电脑 (2)手机打开开发者模式.USB调试功能 二.基础信息配置 1,获取设备号 终端获取设备号,指令:adb devices 2,获取apk包名.activity (1)打开终端 (2)输入指令“aapt dump badging /Users/alisa/Downloads/weixin_1520.apk” 备注:记…
前言 unittest是python自带的单元测试框架,类似于Junit(Java单元测试框架).支持自动化测试,可编写测试前置&后置条件,并且可批量运行测试用例并生成测试报告. 使用unittest需遵循以下几点: 1,使用时需导入unittest模块 2,编写测试类,并继承unittest.TestCase 3,测试用例名字以test开头(unittest会自动将test开头的方法放入测试用例集中) 4,断言需用unittest断言格式 用法简介 一.前置&后置 unittest前后置…
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...) 注意,目前的实战都是流水账式写的,后面才会结合框架+PO模式 目的是为了掌握所学的Selenium基础 实战题目 访问:https://m.weibo.cn/ 点击:大家都在搜 点击:微博热搜榜…
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...) 注意,目前的实战都是流水账式写的,后面才会结合框架+PO模式 目的是为了掌握所学的Selenium基础 实战题目 访问:https://www.toutiao.com/ 获取到下图所有黑框里的内容…
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...) 注意,目前的实战都是流水账式写的,后面才会结合框架+PO模式 目的是为了掌握所学的Selenium基础 实战题目 1.访问:http://www.51job.com 2.输入搜索关键词 "pyth…
前言 adb(Android Debug Bridge)工具是android-sdk里的一个工具,是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互.在app自动化测试过程中,有时要用到adb命令,但是每次都要百度感觉很是繁琐,故总结了下app自动化过程中几个常用的adb命令. adb常用命令 获取设备号 $ adb devices  下载apk 前提:需下载apk至电脑 $ adb install <电脑apk路径> 卸载apk $ adb uninstall <apk包名>…
1.话不多说,直接贴入代码 上面的 document.getElementById 可以替换成别的定位方式,比如: 通过name获取:document.getElementsByName 通过标签获取:document.getElementsByTagName 通过class获取:document.getElementsByClassName 通过css获取:document.querySelector.document.querySelectorAll 2.稍微封装一下…
前言 有些页面的链接打开后,会重新打开一个窗口,想要在新页面上操作,就需要先切换窗口了.获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了. 1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别 获取当前窗口的句柄 driver.current_window_handle 获取所有窗口的句柄 driver.window_handles 2.切换句柄 方法一: 1.循环判断是否与首页句柄相等 2.如果不等,说明是…
js处理iframe无需先切换到iframe上,再切回来操作.它可以在iframe上和主页面上来回自由操作. switch方法需要先切换到iframe上,操作完之后又的切换回来(很容易忘记切换回来),操作比较繁琐. 1.js处理富文本(富文本格式如禅道中的添加bug页面) 带iframe的元素,用js去操作contentWindow(相当于切换到iframe) body = "这里是通过js发的正文内容" # js处理iframe问题(js代码太长了,我分成两行了) js = 'doc…
前面已经写过利用BeautifulReport生成测试报告,那么接下来讲讲如何在测试报告里面保存截图 首先需要在测试用例中定义一个截图的方法: # 截图方法 """ os.path.abspath:返回当前目录的绝对路径 传入一个img_name,并存储到指定路径下 """ def save_img(self, img_name): self.driver.get_screenshot_as_file('{}/{}.png'.format(os.…
前言 有很多小伙伴吵着要完整的项目源码,完整的项目属于公司内部的代码,这个是没法分享的,违反职业道德了,就算别人分享了,也只适用于本公司内部的业务. 所以用例的代码还是得自己去一个个写,我只能分享项目框架,只能帮你们到这了. 一.项目结构 1.新建一个工程(一定要创建工程),工程名称自己定义,如:yoyo_jiekou 2.在工程的跟目录新建一个脚本:run_main.py,用来执行全部用例 3.在工程下创建以下几个pakage包: --case:这个包放test开头的测试用例,也可以放一些封装…
原文地址https://www.cnblogs.com/yoyoketang/tag/python接口自动化/ 原文地址https://www.cnblogs.com/yoyoketang/ 原文地址https://www.cnblogs.com/yoyoketang/p/7259993.html 前言 有很多小伙伴吵着要完整的项目源码,完整的项目属于公司内部的代码,这个是没法分享的,违法职业道德了,就算别人分享了,也只适用于本公司内部的业务. 所以用例的代码还是得自己去一个个写,我只能分享项目…