python自动化测试脚本编写
① 如何使用python做android的自动化测试
开始第一个简单的Android UI自动化测试
1.使用adb命令连接真机或模拟器
2.打开uiautomatorviewer工具
3.使用uiautomatorviewer工具获取应用的元素进行定位
4.简单介绍unittest框架的使用方法
5.使用Python编写猫宁考勤应用注册模块的自动化测试
1.使用adb命令连接真机或模拟器:
手机USB连接电脑,进入开发者模式;
cmd命令:adb devices ,查看手机是否连接
这里写图片描述
显示错误
这是因为adb的端口被占用,我们需要查看是什么应用占用了这个端口(5037为adb默认端口)
cmd命令 : netstat -aon|findstr “5037”
这里写图片描述
可以看到占用5037端口对应的程序的PID号为8388;
cmd命令 : tasklist|findstr “8388”
这里写图片描述
可以看出8388对应的程序为kadb.exe,说明该程序正在使用5037端口;
这时我们需要在任务管理器中结束kadb.exe进程,按快捷键“Ctrl+Shift+Esc”调出Windows任务管理器,找到“kadb.exe”,单击下方的结束进程即可!
这里写图片描述
我们再次运行cmd命令:adb devices
这里写图片描述
这一步成功后我们才能运行sdk自带的uiautomatorviewer;
我们需要用uiautomatorviewer工具来获取元素,用于定位。
cmd命令:uiautomatorviewer,打开uiautomatorviewer界面
这里写图片描述
或者找到sdk目录:sdk\tools中找到uiautomatorviewer.bat文件双击运行
这里写图片描述
2.打开uiautomatorviewer工具
这里写图片描述
我们可以根据text,resource-id,class等元素进行定位
3.使用uiautomatorviewer工具获取应用的元素进行定位
这里我使用python自带的IDLE进行编写测试脚本,打开python文件找到IDLE(python GUI)双击打开,如图:
这里写图片描述
4.简单介绍unittest框架的使用方法
# -*- coding:utf-8 -*-
from uiautomator import device as d
import unittest
class Mytest(unittest.TestCase):
#初始化工作
def setUp(self):
print "--------------初始化工作"
#退出清理工作
def tearDown(self):
print "--------------退出清理工作"
#测试点击猫宁考勤case
def test_login(self):
d(text="猫宁考勤").click()
print "--------------测试1"
#测试2
def test_z(self):
print "--------------测试2" #这里你可以写你的第二个测试用例,
#测试3
def test_w(self):
print "--------------测试3" #这里你可以写你的第三个测试用例。。。。。。。。。。。。。
if __name__ == '__main__':
unittest.main()
结果如下:
Testing started at 21:14 …
————–初始化工作
————–测试1
————–退出清理工作
————–初始化工作
————–测试3
————–退出清理工作
————–初始化工作
————–测试2
————–退出清理工作
Process finished with exit code 0
从结果中我们可以看出unittest框架的运行方式为:
setUp 测试1 tearDown
setUp 测试2 tearDown
setUp 测试3 tearDown
5.使用Python编写猫宁考勤应用注册模块的自动化测试
# -*- coding:utf-8 -*-
from uiautomator import device as d
import time
import unittest
class MyTestSuite(unittest.TestCase):
# 初始化工作
def setUp(self):
print "--------------初始化工作"
# 退出清理工作
def tearDown(self):
print "--------------退出清理工作"
#***************************方法**************************************
# 判断控件是否存在 & text
def check_controls_exists(self, controls_text):
if d(text=controls_text).exists:
return 1
else:
return 0
# 判断按钮是否置灰 & text & clickable
def check_controls_click_text(self, controls_text):
if d(text=controls_text).info.get("clickable") is True:
return 1
else:
return 0
#assertIn(a, b) a in b
def check_ainb(self,resourceid,b):
if d(resourceId=resourceid).info.get("text") in b:
return 1
else:
return 0
#***********************************************************
# 注册模块
def test_Aregister(self):
try:
time.sleep(2)
#猫宁考勤开启全新时代
self.assertEqual(self.check_controls_click_text("注册"),1,u"猫宁考勤开启全新时代")
# 猫宁考勤开启全新时代--》点击注册按钮进入注册猫宁界面
d(text="注册").click()
time.sleep(3)
#注册猫宁界面
self.assertEqual(self.check_text("com.isentech.attendancet:id/regis_phone","请输入手机号码"),
1,u"注册页面-》请输入手机号码")
self.assertEqual(self.check_text("com.isentech.attendancet:id/regis_verifycode","请输入验证码"),
1,u"注册页面-》请输入验证码")
self.assertEqual(self.check_controls_click_text("获取验证码"), 0,u"注册页面-》获取验证码")
self.assertEqual(self.check_controls_click_text("《中科爱讯服务协议》"), 1,u"注册页面-》《中科爱讯服务协议》")
self.assertEqual(self.check_controls_click_text("注册"), 0,u"注册页面-》注册")
time.sleep(2)
#《中科爱讯服务协议》
d(text="《中科爱讯服务协议》").click()
time.sleep(2)
self.assertEqual(self.check_ainb("com.isentech.attendancet:id/title","服务协议"), 1,u"注册页面-》服务协议")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/title_back").click()
time.sleep(1)
#手机号不输入是否能注册
d(text="注册").click()
time.sleep(3)
# 手机号只输入1个数字是否能注册&只输入1个数字是否能获取验证码
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text("1")
self.assertEqual(self.check_controls_click_text("获取验证码"), 0)
time.sleep(1)
d(text="注册").click()
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_phone").clear_text()
time.sleep(1)
#只输入5个数字是否能获取验证码
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text("11111")
self.assertEqual(self.check_controls_click_text("获取验证码"), 0)
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_phone").clear_text()
time.sleep(1)
#只输入手机号是否能注册
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text(phone_number)
self.assertEqual(self.check_controls_click_text("注册"), 0)
time.sleep(1)
d(text="注册").click()
time.sleep(1)
#输入正确的验证码&获取验证码是否高亮
d(resourceId="com.isentech.attendancet:id/regis_verifycode").set_text("5648")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("获取验证码"), 1)
time.sleep(2)
#密码只输入1个数字是否能注册&注册按钮是否高亮
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("1")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("1")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("注册"), 0,u"密码只输入1个数字是否能注册")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_pass").clear_text()
d(resourceId="com.isentech.attendancet:id/regis_passAgain").clear_text()
time.sleep(1)
#输入不相同的密码是否能注册
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("123456")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("12345")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("注册"), 0,u"输入不相同的密码是否能注册")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_pass").clear_text()
d(resourceId="com.isentech.attendancet:id/regis_passAgain").clear_text()
time.sleep(1)
#输入正确的密码是否能注册&我已同意是否打钩
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("123456")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("123456")
time.sleep(1)
self.assertEqual(self.check_controls_click_resourceId("com.isentech.attendancet:id/regis_agree"), 1)
self.assertEqual(self.check_controls_click_text("注册"), 1)
time.sleep(2)
d(text="注册").click()
time.sleep(8)
except Exception, e:
print u"Error: 注册模块有问题\n", e
def test_app():
test_unit = unittest.TestSuite()
test_unit.addTest(MyTestSuite("test_Aregister"))
if __name__ == "__main__":
# 测试app
unittest.main()
② 史上最强,Python3+Selenium3+PO+Yaml+DDT自动化测试框架...
本文介绍一种Python3 + Selenium3 + PO + Yaml + DDT自动化测试框架,该框架能够满足日常测试工作的需求。
采用Page Object模式,将页面定位与业务操作分离,便于维护测试脚本。通过Yaml文件管理页面元素与测试用例数据,实现元素与数据的灵活修改,提高测试灵活性。框架采用分层设计,包括基础类、业务层、用例层和框架层,分别负责操作封装、页面对象实现、功能测试和流程支撑,确保模块互不影响,便于灵活组装。
编写测试用例遵循以下步骤:首先,在testyaml目录下创建页面对象Yaml文件,定义页面元素;其次,在testdata目录下创建数据文件,提供测试用例参数;然后,在page_obj目录下编写页面对象类,实现页面操作逻辑;最后,在testcase目录下编写测试用例,利用DDT读取Yaml数据,执行测试流程。
遵循上述方法,测试用例的编写简单高效。执行测试框架后,将获得实际结果。本框架适合Python编程学习、接口自动化、Web自动化和App自动化项目实践,同时提供简历撰写指导、测试开发DevOps体系、常用自动化测试工具、JMeter性能测试等内容,帮助您实现从入门到精通的全栈自动化测试技能。
不要害怕失败,每一次努力都是成功的铺垫,坚持与勇气是实现梦想的关键。在测试与开发的道路上,不断挑战自我,超越极限,您将收获无限可能,创造属于自己的辉煌。
面对挑战与困境,保持信念与勇气,用汗水浇灌梦想。相信自己的力量,坚持不懈,成为无人能及的奋斗者,创造属于自己的非凡人生。
无论经历多少艰辛与挫折,始终坚信,保持信念与勇气,您将成为无人能及的奋斗者,创造属于自己的辉煌。
③ adb+uiautomator+Python濡备綍瀹炵幇镊锷ㄥ寲娴嬭瘯锛
镊锷ㄥ寲娴嬭瘯鍦ˋndroid骞冲彴涓婂彲浠ヤ娇鐢ˋDB锛圆ndroid Debug Bridge锛夈乁IAutomator鍜孭ython𨱒ュ疄鐜般备互涓嬫槸锘烘湰镄勬ラわ细
瀹夎匒DB鍜孶IAutomator Viewer锛
纭淇滱DB宸插畨瑁呭苟閰岖疆濂紸ndroid璁惧囩殑杩炴帴銆
UIAutomator Viewer鐢ㄤ簬镆ョ湅鍜屽垎鏋怉ndroid搴旂敤镄刄I缁撴瀯銆
缂栧啓UIAutomator鑴氭湰锛
浣跨敤UIAutomator Viewer鍒嗘瀽搴旂敤镄刄I缁撴瀯锛屾垒鍒伴渶瑕佽繘琛岃嚜锷ㄥ寲娴嬭瘯镄勫厓绱犮
缂栧啓UIAutomator鑴氭湰锛屼娇鐢↗ava鎴朘otlin缂栧啓锛屼互妯℃嫙鐢ㄦ埛涓庡簲鐢ㄧ殑浜や簰銆
浣跨敤Python杩涜孉DB镎崭綔锛
鍒╃敤Python镄剆ubprocess妯″潡镓ц孉DB锻戒护锛屼笌璁惧囱繘琛屼氦浜掞纴濡傚畨瑁呭簲鐢ㄣ佸惎锷ㄥ簲鐢ㄧ瓑銆
鏁村悎Python鍜孶IAutomator鑴氭湰锛
浣跨敤Python镄剆ubprocess妯″潡璋幂敤UIAutomator鑴氭湰锛屼互镓ц孶I镊锷ㄥ寲娴嬭瘯銆
澶勭悊娴嬭瘯缁撴灉锛
鍦≒ython鑴氭湰涓娣诲姞阃昏緫锛屼互澶勭悊鍜屽垎鏋怳I镊锷ㄥ寲娴嬭瘯镄勭粨鏋溿
鍙浠ヤ娇鐢ㄦ祴璇曟嗘灦濡俻ytest鎴杣nittest𨱒ョ粍缁囨祴璇旷敤渚嫔拰鐢熸垚鎶ュ憡銆
浠ヤ笅鏄涓涓绠鍗旷殑Python鑴氭湰绀轰緥锛屽叾涓浣跨敤subprocess璋幂敤UIAutomator鑴氭湰锛
import subprocess
# 瀹氢箟UIAutomator鑴氭湰鏂囦欢璺寰
uiautomator_script = "path/to/uiautomator_script.jar"
# 镓ц孶IAutomator鑴氭湰
subprocess.run(["java", "-jar", uiautomator_script])
璇锋敞镒忥纴涓婅堪绀轰緥涓镄剈iautomator_script.jar搴旀浛鎹涓哄疄闄呯殑UIAutomator鑴氭湰鏂囦欢璺寰勚傛ゅ栵纴纭淇濊惧囧凡杩炴帴骞跺勪簬璋冭瘯妯″纺銆
④ 如何使用python做android的自动化测试
目前大家对Python都有一个共识,就是他对测试非常有用,自动化测试里Python用途也很广,但是Python到底怎么进行自动化测试呢?今天就简单的向大家介绍一下怎么使用Python进行自动化测试,本文只是自己的一点点分享,若有错误,请大家多多批评指正。这里主要介绍的是一些Python测试的框架
1、单元测试
a、unittest :Python自带的单元测试框架
b、pyunit:Junit的Python版本
2、使用Pyhon进行Windows GUI测试
这部分的功能主要就是和大家平时使用的QTP类似。在Windows下我们可以使用pywinauto这个开源的框架:
来个小例子:
app.Notepad.MenuSelect("Help->About Notepad")
app.AboutNotepad.OK.Click()
app.Notepad.Edit.TypeKeys ("pywinauto Works!", with_spaces = True)
呵呵,强大吧
3、使用Python进行Web自动化测试
使用Python进行Web自动化测试的工具有很多,这里就向大家推荐一下我比较熟悉的Selenium(Web Driver)吧。
⑤ Selenium+Python做web端自动化测试框架与实例详解教程
面对业务空闲期,我利用Selenium与Python构建了一个web端自动化测试框架,旨在提升测试效率。在此过程中,我结合网络资源,虽然初学者身份面临诸多挑战,但框架已基本完成,现将编写过程和关键模块分享,以便后续学习和回顾。
自动化测试的核心是编写脚本让软件自动运行,检测问题,替代手动测试。框架设计通常包括几个关键模块:
common:存放通用方法,如定位元素的函数。
data:存储文件信息,如测试数据和配置文件。
logs:记录程序运行的日志。
picture:存放截图信息。
report:生成测试报告。
test_case:编写具体的测试用例,遵循测试用例命名规则(以test开头)。
conf.ini和readconf.py:存储配置信息,注意Python版本差异。
在搭建过程中,遇到的难题包括读取XML文件和理解字典传递。例如,通过config_db将字典参数化传递。举个例子,kwargs={'a':1, 'b':2, 'c':3}等同于test(a=1, b=2, c=3)。db模块主要负责SQL语句的读取和执行。
data模块中的xml文件主要用于UI测试,test_data.xlsx则存储用户信息和URL。logs记录程序运行时的详细信息,picture存放测试过程中的截图,report则用于存放测试报告的输出。
虽然每个项目可能需要定制化模块,但以上所述框架适用于大多数web UI和接口自动化测试。对于新手来说,这些模块提供了基本的框架参考。
⑥ 如何用python做自动化测试
当然可以
1、编写Python版本的minicom,这个是自动化测试日志记录的需要
用于控制串口输出的字符颜色,高亮显示出错信息,方便开发者在线调试问题
2、控制程控电源、程控开关,这些可以自动化测试的硬件基础
3、写整套测试框架,控制整个测试交互流程,Case管理等等
Python运行起来效率没那么高,但是对于编写来说是非常高效的。
⑦ 自动化脚本怎么写
引流脚本,其实简单的来说,就是模拟人的自然行为,实现各种点击,发送文字,打字等等功能。
即不需要人工去干扰,也不需要什么控制器去控制,每天24小时,根据事先设计的指令,完成指定的任务。
一个成熟的脚本 ,可以几十 ,几百台手机同步运行 。
自动化脚本稳定性如何,如果涉及到一些比较敏感的业务,会不会封号呢??那么应该如何正确的使用脚本。
目前比较好的脚本设计语言要数 按键精灵,分PC版和手机版本,当然也有其他的好的 自动化脚本语言。
比如 autoJS ,nodeJS等等 ,
目前基本所有的 脚本设计语言,都可以免ROOT执行 ,这个也是为了避免大型APP检测。很多APP
都会检测,手机是否已经被ROOT,如果已经Root ,则直接封号 ,或是限制流量等等,这样就失去了 自动化的意义了 。
一:自动化脚本稳定不稳定?
其实设计 一个 自动化脚本 ,随便一个 入门级程序员都可以 ,甚至不会开发的,都可以见到的开发一些脚本。
特别是按键精灵,支持中文 开发 ,太给力了 。
而且一般通过按键精灵编写的 ,都是非常稳定的 ,因为这个开发团队经历了 十多年的改进,完善 ,已经非常的值得让人信赖,
少有的良心软件之一,不过最近也开始收费,适当收费,个人觉得也是合理的 ,因为别人也是花费大量的人力,财力 。
二:正确使用自动化脚本的方法是什么?
不管任何一个脚本,他的最终的目标就是可以让一些复杂的操作,可以根据事先设计的轨迹进行运行 ,至于是否封号,
这个并不属于脚本需要实现的范围,所以很多人使用脚本 ,导致封号,或是效果差,
就怪罪脚本不行,这个是完全不合理的 。
大多封号,都是有些用户24小时发送广告,生怕成本赚不回来,而且大部分都是采用模拟器的方式,
当用户被大量骚扰,平台检测出来你使用同样的一个硬件环境,大量刷 ,
所以很多时候 ,我们还是得老实点 ,不停更换账号 ,适量发送,多从平台,从用户角度出发,才能减低封号率。
如何解决问题,让工具为我们服务?
既然清楚,分析了真实原因 ,自然就要开始着手解决问题 ,相信解决问题的方法总比问题多。
每天我们不是在解决问题就是在解决问题的路上。
既然脚本无法解决一机一号问题 ,就得着手从其他的途径解决这个问题 。
这里介绍一款工具 ,可以完美解决一机一号问题 。
废话就不多说 ,可以详细参考下面的视频
https://www.bilibili.com/video/BV1fK411A7DD
看完这个文章介绍,我们就可以实现,将手机根据自己的需要 ,模拟出一个独一无二的手机
功能非常的齐全 ,可以进行虚拟的GPS定位 ,随机mac IME编码等等 ,内置大量主流手机 。
然后配合自动化脚本 ,就可以实现批量的自动化操作,同时也可以很好的避免封号 ,
比如批量转发视频,或是自动点赞,评论 ,回复等等 ,
通过加大自己作品曝光量,自然对你感兴趣的就会关注你,粉丝会慢慢积累,
在运营中,要做好方向规划,利用好脚本 ,自然不管你做什么事,都会得心应手 。