做网站签订合同/人民网疫情最新消息
一、app自动化环境搭建
1、安装jdk及配置jdk的环境变量
app底层是c语言,应用层是java,所以需要jdk
2、安装SDK,配置android SDK环境
3、安装模拟器
4、下载安装Appium工具
01、appium客户端 appium destop 服务器
02、命令行安装:pip.exe install Appium-Python-Client
apium python库
同时,我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取
软件测试视频教程观看处:
B站最用心的自动化测试教程,从入门到进阶(全600集),通俗易懂,2023最新版,学完即就业!学不会我立马退出测试界!
二、测试
1、打开usb选项
2、电脑与模拟器建立连接 通过adb命令
检查电脑和模拟器是否建立连接 adb devices
3、没有连接 adb connect 127.0.0.1:62001
三、pycharm代码启动app.apk
1、线性代码
下载考研帮,在电脑端下载后拉到模拟器即可使用
#用python代码启动考研帮
#提前告知代码要测试哪个app,哪个设备
#设备信息
from appium import webdriverinfo={
#测试的平台Androidios
#info['platformName']='Android'
"platformName":"Android",
#测试的版本号设置-关于-版本号
"platformVersion":"7.1.2",
#设备名adbdevices
"deviceName":"127.0.0.1:62001",
#包名获取方式有很多种adbshelldumpsyswindowfindstrmCurrentFocu打开当前窗口的命令
"appPackage":"com.tal.kaoyan",
#应用名
"appActivity":"com.tal.kaoyan.ui.activity.SplashActivity",
#"允许不重置"
"noRest":False
}
#启动考研帮
#web自动化seleniumwebdriver
#app自动化appiumwebdriver
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',info)
#重点打开appiumdestop,start#清空设置-应用-缓存
#appiumsdk中的工具tools,uiautomator.bat
#测试登录
#取消点击
#driver.find_element_by_id('android:id/button2').click()
#跳过点击
#driver.find_element_by_id('com.tal.kaoyan:id/tv_skip').click()
#用户协议点击同意
#每次打开界面都不一样,不写代码了
#无法播放此视频点击确定
driver.find_element_by_id('android:id/button1').click()
#密码登录
driver.find_element_by_id('com.tal.kaoyan:id/loginRegistorcodeAndPassword').click()
#输入用户名,输入密码,点击登录按钮
driver.find_element_by_id('com.tal.kaoyan:id/loginEmailEdittext').send_keys('')
driver.find_element_by_id('com.tal.kaoyan:id/loginPasswordEdittext').send_keys('')
#已阅读并同意,点击单选按钮
driver.find_element_by_id('android.widget.CheckBox').click()
#点击登录
#driver.find_element_by_id('com.tal.kaoyan:id/loginLoginBtn').click()
#xpath写法
driver.find_element_by_xpath("//*[@text='登录']").click()
2、优化代码
优化思路:
登录脚本 优化 配置信息放在yaml文件
启动时,如果说没启动,启动报错,可以用日志文件记录起来,封装日志
登录,有些app会弹窗,这些方法可以封装成公共方法 公共文件
登录脚本,关键字驱动,把常用的方法封装成一个文件
测试登录,测试不同的情况,可以用unittest,pytest;+ddt测试数据,可以放在测试文件中
生成测试报告 unittest,pytest
把框架放在jenkins,实现开发提交代码,就自动运行自动化框架,把测试报告发出来
搭建框架容易,难点在编程基础
完整优化代码
2.1)base_page.py
#基类,封装的公共方法都在这里class BasePage:def __init__(self,driver):self.driver= driver#元素定位def locator(self,loc):return self.driver.find_element(*loc)#输入# self.driver.find_element_by_id('').sendkey('')def input_(self,loc,txt):self.locator(loc).send_keys(txt)# 点击def click(self,loc):self.locator(loc).click()
2.2)common_fun.py
import logging
from selenium.common.exceptions import NoSuchElementException
import logging
from selenium.webdriver.common.by import By
from config.desired_caps import appium_desiredfrom config.base_page import BasePage
class Common(BasePage):cancel = (By.ID,'android:id/button2')skip=(By.ID,'com.tal.kaoyan:id/tv_skip')def check_cancel(self):logging.info("=============开始检查取消按钮==============")try:cancel=self.driver.find_element(*self.cancel)except NoSuchElementException:logging.info("取消按钮没有找到")else:logging.info("点击取消")cancel.click()def check_skip(self):logging.info("=========开始检查跳过按钮============")try:skip = self.driver.find_element(*self.skip)except NoSuchElementException:logging.info("跳过按钮没有找到")else:logging.info("点击跳过")skip.click()#1、获取整个屏幕的大小sizedef size(self):# a=driver.get_window_size()['width']x=self.driver.get_window_size()['width']y=self.driver.get_window_size()['height']return x,y#向左划,宽1000 高1000# driver.swipe(900,800,500,800,2000)def swipeLeft(self,t,n):lsize=self.driver.size()#900x1=lsize[0]*0.9y1=lsize[1]*0.5x2=lsize[0]*0.1for i in range(n):self.driver.swipe(x1,y1,x2,y1,t)
2.3)cs_caps.yaml
platformName: Android
platformVersion: 7.1.2
deviceName: 127.0.0.1:62001
appPackage: com.tal.kaoyan
appActivity: com.tal.kaoyan.ui.activity.SplashActivity
noRest: False
ip: 127.0.0.1
port: 4723
2.4)desired_caps.py
import yaml
from appium import webdriver
from config.testLog import test_log
log=test_log()
# 要yaml文件的数据 找到yanl文件,可读
def appium_desired():stream = open('../config/cs_caps.yaml', 'r')# 数据加载出来data = yaml.load(stream, Loader=yaml.FullLoader)# 字典是什么 元组是什么info = {}info['platformName'] = data['platformName']info['platformVersion'] = data['platformVersion']info['deviceName'] = data['deviceName']info['appPackage'] = data['appPackage']info['appActivity'] = data['appActivity']info['noRest'] = data['noRest']# info['ip']=data['ip']# info['port']=data['port']# driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', info)log.info('开始跑')driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', info)return driver
if __name__ == '__main__':appium_desired()
2.5)login_page.py
from selenium.webdriver.common.by import By
from config.common_fun import Commonlog=test_log()
class LoginPage(Common):user=(By.ID, 'com.tal.kaoyan:id/login_email_edittext')pwd=(By.ID, 'com.tal.kaoyan:id/login_password_edittext')button = (By.ID, 'com.tal.kaoyan:id/login_login_btn')def login(self, username,password):#点击取消self.check_cancel()#点击跳过self.check_skip()#输入用户名,输入密码,点击登录log.info('请输入用户名%s'%username)self.input_(self,user,username)log.info('请输入密码%s' % password)self.input_(self, pwd, password)self.click(self.button)#要测试各种情况,测正常的情况,异常的情况,先进性unittest永历官吏框架
#结合ddt,想要把测试数据放在Yaml中,放在代码
if __name__ == '__main__':driver = appium_desired()lp=LoginPage(driver)lp.login('qwerty2664','qwerty123')
2.6)testLog.py
#日志
import logging
def test_kog():logger=logging.getLogger()logger.setLevel(logging.INFO)if not logger.handlers:#输出到控制台sh=logging.StreamHandler()logger.addHandler(sh)#设置格式fomartor=logging.Formatter(fmt='%(asctime)s%(filename)s%(levelname)s%()')sh.setFormatter(fomartor)#输出到文本fh =logging.FileHandler('../logs/runlog.log',encoding='utf-8')logger.addHandler(fh)fh.setFormatter(fomartor)return logger
四、总结
PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!
☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。
相关文章:

详解如何在python中实现简单的app自动化框架
一、app自动化环境搭建 1、安装jdk及配置jdk的环境变量 app底层是c语言,应用层是java,所以需要jdk 2、安装SDK,配置android SDK环境 3、安装模拟器 4、下载安装Appium工具 01、appium客户端 appium destop 服务器 02、命令行安装&#…...

【TCP】三次握手 与 四次挥手 详解
三次握手 与 四次挥手 1. 三次握手2. 四次挥手三次握手和四次挥手的区别 在正常情况下,TCP 要经过三次握手建立连接,四次挥手断开连接 1. 三次握手 服务端状态转化: [CLOSED -> LISTEN] 服务器端调用 listen 后进入 LISTEN 状态ÿ…...

正则表达式新解
文章目录 是什么?正则用法匹配单个字符匹配一组字符其他元字符核心函数 贪婪匹配和非贪婪匹配正则练习 是什么? 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊…...

MissionPlanner编译过程
环境 windows 10 mission planner 1.3.80 visual studio 2022 git 2.22.0 下载源码 (已配置git和ssh) 从github上克隆源码 git clone gitgithub.com:ArduPilot/MissionPlanner.git进入根目录 cd MissionPlanner在根目录下的ExtLibs文件下是链接的其它github源码࿰…...

SpringBoot 员工管理---通用模板 ---苍穹外卖day2
感谢点击 希望你有所收获! 目录 1.新增员工 需求分析:根据页面原型进行业务分析 接口设计 数据库设计 代码开发 功能测试 如何在接口文档中统一添加JWT令牌 获取当前登录员工的ID 2.员工分页查询 需求分析 代码开发 如何将日期格式化 3.启用禁用员工 1.新…...

可信执行环境(Tee)入门综述
SoK: Hardware-supported Trusted Execution Environments [ArXiv22] 摘要引言贡献 范围系统和威胁模型系统模型威胁模型共存飞地对手无特权软件对手系统软件对手启动对手外围对手结构对手侵入性对手 关于侧信道攻击的一点注记 VERIFIABLE LAUNCH信任根(RTM…...

Java浮点运算为什么不精确
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 1. 什么是 Java 浮点运算? 在 Java 中,浮点运算指的是对浮点数进行加减乘除等基本运算…...

linux使用操作[1]
文章目录 版权声明快捷键ctrl c 强制停止ctrl d 退出、登出history命令光标移动快捷键清屏快捷键 软件安装命令常见linux系统包管理器yum命令apt命令 systemctl命令软连接日期&时区修改linux时区ntp程序 IP地址&主机名ip&主机名域名解析win配置主机名映射虚拟机…...

权限提升Linux篇
提权工具 https://github.com/liamg/traitor https://github.com/AlessandroZ/BeRoot https://github.com/rebootuser/LinEnum https://github.com/mzet-/linux-exploit-suggester https://github.com/sleventyeleven/linuxprivchecker https://github.com/jondonas/linux…...

影刀自动化采集底层逻辑
hello,大家好,这里是【玩数据的诡途】 接上回 <我的影刀故事> 今天给大家介绍一下整个采集的底层逻辑,包括业务流程自动化也是基于这一套基础逻辑进行展开的,顺便带大家熟悉一下影刀,既然叫影刀系列了,那后续一些…...

swiper使用
介绍 Swiper(swiper master)是一个第三方的库,可以用来实现移动端、pc端的滑动操作。,swiper应用广泛,使用频率仅次于jquery, 轮播图类排名第一,是网页设计师必备技能,众多耳熟能详的品牌在使用…...

基于遗传算法解决的多仓库多旅行推销员问题(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

微信小程序 工具使用(HBuilderX)
微信小程序 工具使用:HBuilderX 一 HBuilderX 的下载二 工具的配置2.1 工具 --> 设置 --> 运行配置2.1.1 微信开发者工具路径2.1.2 node 运行配置 2.2 插件 工具 --> 插件安装2.2.1 下载插件 三 微信小程序端四 同步运行五 BUG5.1 nodemon在终端无法识别 一 HBuilderX…...

设计模式:观察者模式(C++实现)
观察者模式(Observer Pattern)是一种设计模式,用于定义对象之间的一对多依赖关系,当一个对象(称为主题或可观察者)的状态发生变化时,它的所有依赖对象(称为观察者)都会收…...

【前端打怪升级日志之微前端框架篇】微前端qiankun框架子应用间跳转方法
参考链接qiankun官网:微应用之间如何跳转? 1.主应用、子应用路由都是hash模式 主应用根据 hash 来判断微应用,无需考虑该问题 2.主应用根据path判断子应用 方法实现适用条件参数传递存在问题a标签跳转<a href"/toA"></…...

C语言中的typedef struct用法
在学习数据结构的时候,我经常遇到typedef struct,刚开始感觉很别扭,查阅资料之后才真真理解了。 先从结构体说起。 1、结构体用法 struct Student{int age;char s;}如果要定义一个该结构体变量,就需要:struct Student st1; 有没…...

司徒理财:9.27黄金原油日内多空走势行情操作建议
黄金走势分析: 黄金昨日抵达了此前一直强调的日线布林下轨的1903位置,甚至更低!昨天的空单也是直接获利收割了!现在如果是要继续做空,下方是有日线支撑的,甚至周线的支撑也不远,在1890…...

C++设计模式(Design Patterns)
设计模式主要原则 单一职责原则(Single Responsibility Principle) 实现类要职责单一 里氏替换原则(Liskov Substitution Principle) 不要破坏继承关系 依赖倒置原则(Dependence Inversion Principle) …...

vue点击按钮收缩菜单
问题描述 VUE菜单有一个BUG,当我们点击其它按钮或者首页的时候,已经展示的一级菜单是不会自动收缩的。这个问题也导致很多开发者把一级菜单都换成了二级菜单。 错误展示 错误的效果请看下图。 解决方法 1、寻找菜单文件 因为我使用的是ruoyi的前端框…...

Vue 防止忘记的命令
创建新项目 npm init vuelatest cd <项目名> npm install npm run dev 运行项目 yarn yarn serve 这里如果我用npm install 或者npm run serve会报错,但是新建项目用npm就不会,有大佬知道为什么吗...

APACHE NIFI学习之—RouteOnContent
RouteOnContent 描述: 通过正则表达式匹配输入数据流的内容,然后将输入数据流的副本路由到正则表达式相匹配的输出数据流。 正则表达式作为用户自定义的属性添加,并以该属性名称为输出连线,其值为正则表达式所匹配数据流内容。 当用户定义的属性支持属性表达式语言时,其结…...

【C语言】【结构体的内存对齐】计算结构体内存大小,有图解
计算结构体内存大小,需要用到结构体内存对齐的知识 来段代码看看什么是结构体对齐: #include<stdio.h> struct S1 {char a;char b;int num; }; struct S2 {char a;int num;char b; }; int main() {printf("%zd\n", sizeof(struct S1))…...

Intel 700 800系网卡升级支持WOL UEFI PXE方法
Intel 700 800系网卡默认的NVM版本是不支持UEFI的,升级NVM也不能解决,需要将UEFI driver 包到NVM里。操作步骤如下: 1. 下载Preboot软件包,有Windows和Linux版本,本次使用Linux版本做示例。 Intel Ethernet Connecti…...

vue3 - 使用 xlsx 库将数据导出到 Excel 文件
GitHub Demo 地址 在线预览 xlsx是由SheetJS开发的一个处理excel文件的JavaScript库。它可以读取、编写和操作 Excel 文件 安装xlsx npm install xlsx --save实现一个通过的数据导出工具类 import * as XLSX from xlsx/*** description: 导出excel* param {any} dataList* p…...

机器学习,深度学习
一 、Numpy 1.1 安装numpy 2.2 Numpy操作数组 jupyter扩展插件(用于显示目录) 1、pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple 2、pip install jupyter_nbextensions_configurator -i https://pypi.tuna.t…...

【性能测试】jmeter连接数据库jdbc
一、下载第三方工具包驱动数据库 1. 因为JMeter本身没有提供链接数据库的功能,所以我们需要借助第三方的工具包来实现。 (有这个jar包之后,jmeter可以发起jdbc请求,没有这个jar包,也有jdbc取样器,但不能…...

蓝桥等考Python组别二级007
第一部分:选择题 1、Python L2 (15分) 下面哪个不是Python的基本数据类型?( ) 布尔型整数型指针型字符串正确答案:C 2、Python L2...

Java如何解决浮点数计算不精确问题
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 1. 什么是浮点数计算不精确问题? 在 Java 中,浮点数计算不精确问题指的是使用浮点数进…...

一图读懂「五度易链」企业创新服务解决方案,打造卓越营商环境!
“五度易链”紧密围绕园区企业及产业发展需求,基于数据积累和应用,创新企业服务机制,提升企业服务效能,以数字化手段为企业发展纾困解难,赋能企业高质量发展。并帮助园区在运营方面打破数据壁垒,实现数据监…...

软件工程 第一次随堂练习
以下答案是经过人工智能生成,个人理解得出的答案,若有不同见解,请在评论区留言或私信 说明下列需求分别属于下面的哪种类型,为什么? A.业务需求 B.用户需求 C.系统级(功能)需求 D.性能需求 E.质…...