今天这篇文章是昨天那篇文章的下半部哟,喜欢的小伙伴可以收藏哟。
1、HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)
2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
test scripts(测试脚本发送一个请求到appium server)
appium server接收到请求后进行解析并把请求转发给 bootstrap.jar。
jar接收到appium的命令,调用UIAutomator命令实现操作
最终结果由bootstrap.jar返回给Appium server。
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
excel里边存放初始手机号 每次执行完,回写新的手机号(原来号码+1)
每次从数据库里查询最大手机号,在这个基础上加1
初步模型:1-2周,一个月时间
导入unittest模块、被测文件或其中的类
创建一个测试类,并继承unitest.TestCase
定义测试函数,函数名已test_开头,测试用例
调用unittest.main()方法运行测试用例
1.添加元素智能等待时间 driver.implicitly_wait(30)
2.添加强制等待时间 time.sleep()
3.try 方式进行id,name,clas,x path, css selector不同方式进行定位,如 果第一种失败可以自动尝试第二种
主要有四种方式:
appium macaca、robotium、UiAutomator
8种单元素定位方法,8种对应的多元素定位方法;所有方法都是基于driver.find_element()和driver.find_elements()方法,如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.find_element_by_id('id') # 通过元素id属性定位元素
driver.find_element_by_name('name') # 通过元素名字属性定位元素
driver.find_element_by_tag_name('tag_name') # 通过元素的标签名称定位元素
driver.find_element_by_class_name('class_name') # 通过元素的类名称定位元素
driver.find_element_by_link_text('link_text') # 通过链接元素的完整显示文字定位元素
driver.find_element_by_partial_link_text('partial_link_text') # 通过链接元素的部分显示文字定位元素
driver.find_element_by_xpath('xpath') # 通过xpath表达式定位元素
driver.find_element_by_css_selector('css_selector') # 通过css表达式定位元素
driver.find_elements_by_id('id') # find_elements_by_xxx系列也有8种,可以定位多个满足条件的元素
driver.find_element(By.ID, 'id') # 每一个find_element_by_xxx方法都是基于find_element方法的
driver.find_elements(By.ID, 'id') # find_element()方法的复数形式,可以定位多个满足条件的元素
为了保证代码的统一性,使用的最多的是driver.find_element_by_xpath()这个方法,传入定位器,即使我们使用id作为定位器,仍然写成基于id的xpath定位器表达式,如下:
baidu_yi_xia_locator = ‘//input[@id="su"]’ # 百度一下按钮的定位器,写成了xpath,但基于的是id这个属性
baidu_yi_xia = driver.find_element_by_xpath(baidu_yi_xia_locator) #定位元素,并返回给变量
baidu_yi_xia.click() # 点击百度一下
UI自动化的目的不是为了发现多少Bug,主要是为了减轻重复的基础操作和线上监控的作用
monkey不属于严格意义上的自动化,monkey是生成用户或系统的伪随机事件,在屏幕上触发随机点击事件
主要是主流程中比较容易实现的进行自动化,一般在集成阶段进行该版本的自动化监控,平常的话会一直跑线上监控的
Uiautomatorview和appium的客户端
不需要服务器机器在Appium上运行测试。 Appium促进了一个2层架构,其中测试机连接到运行Appium的测试服务器并自动化整个事情。您可以在运行测试的同一台机器上运行Appium。
错误1:需要以下所需的功能,但不提供:设备名称,platformName
错误2:找不到adb。请使用Android SDK根目录路径设置ANDROID_HOME环境变量
错误3:openqa.selenium.SessionNotCreatedException:无法创建新的会话
错误4:如何在移动应用程序中查找DOM元素或XPath?
持续集成源于极限编程(XP),是一种软件实践,软件开发过程中集成步骤是一个漫长并且无法预测的过程。集成过程中可能会爆发大量的问题,因此集成过程需要尽可能小而多,实际上持续集成讲的是不断的去做软件的集成工作。持续集成,最简单的形式是包括一个监控版本控制(SVN等等)变化的工具。当变化被发觉时,这个工具可以自动的编译并测试你的应用
通过分离测试对象和测试脚本的抽象来实现的
Selenium不支持桌面软件的自动化测试,Selenium是根据网页元素的属性才定位元素,而其他桌面软件自动化测试工具是根据桌面元素的位置来定位元素,当然现在也有根据桌面元素的属性来定位的。
可以的,需要借助第三方库
最早的有Selenium IDE,IDE只支持安装在fiefox上一个插件,支持录制自动化脚本。还有
remote RC、Grid 、webdriver。我们一般最重要的就是使用webdriver。
第一个问题:遇到iFrame内嵌框架里的任何元素,和以往一样写出定位器就可以了,只是在执行脚本的时候,定位器是正确的,但是仍然脚本执行失败,报错“无法找到元素”。原因就是因为这个元素被嵌在了iFrame内嵌框架中(我们也叫子框架),所以需要在定位元素前,先写以下代码,作用是从当前的主框架切换到内嵌框架中,有多种方式:
# 切入frame有3种方式
# (1) 通过frame的id属性或name属性
driver.switch_to.frame('layui-layer-iframe1')
# (2) 通过frame的自然序号,从0开始(第1个iframe)
driver.switch_to.frame(0)
# (3) 通过定位器,配合find_element()方法,定位到框架元素后,再把这个定位到的框架元素入参iframe_loc = '//iframe[@id="layui-layer-iframe1"]'
driver.switch_to.frame(driver.find_element_by_xpath(iframe_loc))
第二个问题:没有id或者name属性,只需要用xpath写出表达式,表达式中利用元素的其他单个或多个属性的组合,只要能够保证元素的唯一性即可,如下例子:
//input[@value="百度一下"]
(1)元素在iFrame里:先切入iFrame
(2)元素在打开的新窗口里:先切入新窗口
(3)元素在新跳转的页面里,但是因为各种原因,新页面跳转很慢,已经超过了Selenium中对于元素定位的最大等待时间:增加隐式等待时间或对这个元素进行智能等待
隐式等待的代码如下:
from selenium import webdriver
driver = webdriver.Chrome()
# 设置全局等待(即:隐式等待),注意只需要设置一次
driver.implicitly_wait(60) # 延长到60秒
显示等待(智能等待)的代码如下:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
mobile_phone_loc = (By.XPATH, '//input[@name="mobilephone"]')
elem = WebDriverWait(driver, 60).until(EC.element_to_be_clickable(mobile_phone_loc))
elem.send_keys('13812345678')
xPathRadio = '//input[@type="radio"]'
# radiobox复选框对象我们必须使用find_elements方法去定位多个元素(复选框就是多元素)
radioboxes = driver.find_elements_by_xpath(xPathRadio)
# 使用循环遍历的方式,逐个点击这些定位到的元素
for radiobox in radioboxes:
radiobox.click()
import random # 导入随机数模块
# 一开始,手机号是空的
mobile_phone = ''
# 在中国,手机号码的第一位都是1
phone_num_1 = '1'
# 把第一位生成的数字拼接到手机号
mobile_phone = mobile_phone + phone_num_1
# 根据不同的运营商,手机号码的第2位和第3位都是有固定值的,这里随便列举了几个,放入列表
phone_num_2_to_3 = ['38', '82', '88', '36', '30']
# choices方法可以随机抽取列表里的元素,从而生成第二三位手机号码,并拼接到手机号
phone_num_2_to_3 = random.choices(phone_num_2_to_3)[0]
mobile_phone = mobile_phone + phone_num_2_to_3
# 最后8个数字,循环生成
for i in range(8):
# randint方法可以随机产生0~9的值,但是为了拼接字符串,我们用str()方法转换
phone_num = str(random.randint(0, 9))
# 每一次循环都会生成一个数字,并且继续拼接到现有的电话号码里
mobile_phone = mobile_phone + phone_num
# 打印最终生成的手机号码
print(mobile_phone)
unittest、testng、nose、pytest、
对于属性值动态:
用xpath+模糊匹配定位方式:
用模糊组合定位:
driver.find_element_by_xpath(“//标签名[contains(@属性1,‘片段值’) and @属性2=‘属性值’ and …]")
位置动态:
采用兄弟节点/父子节点方式定位
//*[contains(@resource-id,"fixedWrap")]//*[@content-desc="自选"]
//android.widget.LinearLayout[contains(@resource-id,"home_item_layout_bg") and @index="1"]
//*[contains(@resource-id,"myfund_name_text_view") and @text="${fund_name}"]/../..//android.widget.LinearLayout[1]
今天的文章就到这里了哟,喜欢的小伙伴记得点赞收藏评论加关注哟。
最后我给大家留下了大量的福利需要的小伙伴可以私信关键字“资料”获取哟。
项目实战
app项目,银行项目,医药项目,电商,金融
大型电商项目
全套软件测试自动化测试教学视频
300G教程资料下载【视频教程+PPT+项目源码】
全套软件测试自动化测试大厂面经
python自动化测试++全套模板+性能测试