python
Anthea_1013
这个作者很懒,什么都没留下…
展开
-
报错:Element is not attached to the page document或者“error“:“stale element reference“ ……
场景:获取了元素列表,对列表里的每一个元素进行点击,第一次点击成功,第二次总是失败!原因:当前页面存在刷新 ,原来获取的元素就无效了解决:重新获取一遍元素。原创 2021-08-18 17:25:51 · 407 阅读 · 0 评论 -
selenium--切换alert
页面的弹出框2种:1)右键元素定位2)js弹框 – 由页面操作触发的。WebDriver提供了一个API,用于处理JavaScript提供的三种类型的原生弹窗消息Alerts警告框https://www.w3school.com.cn/tiy/t.asp?f=hdom_alertconfirm确认框与警告框不同,确认框还有取消按钮https://www.w3school.com.cn/tiy/t.asp?f=hdom_confirm3.prompt提示框还可以输入文本https://原创 2021-07-19 16:30:02 · 310 阅读 · 1 评论 -
allure报告和Jekins集成
allure与jenkins集成之后,可以直接在jenkins上,直接查看到上图的allure结果。并因为jenkins的构建记录都存在,所以可以看到历史构建曲线图,用例数的变化、通过率的变化、耗时的变化等均可查看到。1、在jenkins上安装allure插件。Step1: 去jenkins插件网站上下载allure插件最新版本:http://mirrors.jenkins-ci.org/plugins/allure-jenkins-plugin/Step2: 打开jenkins,在 插件管理 —原创 2021-07-08 14:39:44 · 221 阅读 · 0 评论 -
如何实现fixture共享?--conftest.py文件
1、作用域在哪些范围内的用例,可以共享我的fixture??conftest.py在哪个目录下,哪个目录下的所有用例(包括嵌套的目录)都可以共享**2、用例的角度来讲,去调用fixture,搜索顺序:**2.1 先找自己的.py模块内有没有2.2 同级目录下conftest.py当中有没有2.3 父级目录下conftest.py当有没有。。。。pytest的根目录下的conftest.py中有没有3.fixture嵌套:定义fixture的时候,参数是另外一个/多个fixtur原创 2021-07-05 15:08:23 · 126 阅读 · 0 评论 -
pytest--fixture的定义和调用
fixture:前置:环境准备、数据准备后置:清理工作、数据清理测试会话pytest执行测试用例的整个过程==================================================================函数实现,没有固定的名字。(unittest:名字是固定的)怎么让pytest识别为是fixture?--使用@pytest.fixture=========================================================原创 2021-07-01 18:10:37 · 219 阅读 · 1 评论 -
如何生成allure报告的及清除运行前已经存在的结果
1、安装allure命令行工具。(下载最新的)下载地址:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/下载完成之后,解压到任意目录配置环境变量:allure的bin目录。比如D:\allure-2.12.1\bin在cmd当中,执行allure命令2、pytest在执行用例之后,要生成allure可以识别的测试结果文件。安装插件:pip install allure-pytest在pytest原创 2021-06-29 18:09:02 · 2009 阅读 · 1 评论 -
pytest和unittest的相同点和区别
相同点:都有如下步骤:1.编写测试用例:测试类以Test开头,用例名以test_开头。收集用例、执行用例、生成测试结果文件(html、xml)区别:pytest: 灵活unittest: 模板化1.编写测试用例pytest:类和函数都可以unittest:类,并且要继承unittest.TestCase类断言pytest: assert 表达式(True表示断言为真,False表示断言失败)unittest: self.assertXXXX()2.收集和执行测试用例1、unitt原创 2021-06-29 18:01:18 · 233 阅读 · 0 评论 -
字典的遍历结果 dict.keys()
遍历字典的keys,返回值是元组若想返回list1.强转2.for循环到列表里面原创 2021-06-25 14:40:29 · 399 阅读 · 0 评论 -
正则 re模块
import re作用:正则表达式匹配指定规则得字符串一、re常用方法1.re.findall(): 使用正则表达式。匹配字符串,返回匹配到得所有字符串(list)pattern = 正则表达式 ,string = 匹配的字符串,flags = 0 自定义一些规则,比如:不区分大小写2.re.match(): 匹配字符串开始位置得字符串,如果开始位置未匹配到会返回none3.re.search(): 匹配找到得第一个字符串,然后返回4.re.finditer(): 匹配所有的字符串,返回他们的原创 2021-06-17 18:06:01 · 61 阅读 · 0 评论 -
request、接口自动化、
一、requests使用接口测试要素1、url地址2、请求参数3、请求方法4、拓展获取请求头response_info.request.headers获取响应头response_info.headers响应体response_info.json()获取cookieresponse_info.cookies响应状态码response_info.status_code二、代码鉴权1、session鉴权2、token鉴权三、应用3.1 session鉴权import re原创 2021-05-27 11:36:50 · 96 阅读 · 0 评论 -
HTTP基础、post和get的区别、状态码
一、HTTP概念1、Hyper Text Transfer Protocol(超文本传输协议)2、用于从万维网服务器传输超文本到本地浏览器的传送协议3、HTTP协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80二、HTTP请求类【重点】1、get:获取资源2、post:提交资源【了解】3、put:修改资源4、delete:删除资源5、head:查看响应头6、options:查看支持原创 2021-05-21 17:53:50 · 335 阅读 · 0 评论 -
yaml配置文件
一、安装pip install pyyaml二、使用1、dict语法:通过冒号(:)做为连接符,加上空格,后面写value{‘mysql’:{‘host’:‘127.0.0.1’,‘port’:3306},‘name’:‘py39’,‘log’:[‘py39’,‘DEBUG’]}2、列表语法:通过横杠(-)做为连接符,加上空格,后面写元素字符串、数字三、特点1、使用空格,不用缩进符号2、大小写敏感3、一次性读取所有数据4、读出来就是python对象,可以直接使用5、注释:#6、原创 2021-05-21 15:18:48 · 399 阅读 · 0 评论 -
配置文件ini
一、配置文件:ini、yaml、python文件(django配置)实现软编码,方便修改二、配置文件使用场景项目环境切换:测试环境、开发环境、生产环境(通过修域名和端口来配置)数据库切换:host、password、db三、使用1、安装:pip install configparser2、ini文件的格式[section1]key1=val1key2=val2[section2]key3=val3key4=val4书写...原创 2021-05-19 18:13:06 · 365 阅读 · 0 评论 -
Logging自定义日志
项目日志:从代码里面收集过来的,用来还原用户行为日志打印原则:只打印关键信息(能够还原用户行为的关键信息)自动化测试关键信息:1、请求地址2、请求参数3、断言4、请求时间5、请求方式6、日志级别7、响应结果日志级别debug < info < warning < error < critical一、创建日志收集器:logging.getLogger(name)二、创建日志收集渠道:logging.StreamHandler()三、创建日志格式:单独创建,原创 2021-05-17 18:10:34 · 337 阅读 · 0 评论 -
ddt实战
步骤:需求:从excel读取测试用例 + ddt数据驱动 + 通过unittest运行测试用例 + 生成测试报告1、读取测试用例2、写测试用例3、数据驱动加载测试用例到测试套件4、测试用例执行5、对测试结果进行断言6、生成测试报告main.pyimport osimport unittestfrom BeautifulReport import BeautifulReportdir_path = os.path.dirname(__file__)suite = unittes原创 2021-05-17 15:16:47 · 196 阅读 · 0 评论 -
unittest测试用例和测试报告
一、单元测试框架:unittest(python自带的),pytest(第三方库)编写测试用例—收集测试用例—执行用例—生成测试结果二、编写测试用例1、创建测试类:类名称建议以Test开头,必须继承unittest.TestCaseclass TestLogin(unittest.TestCase):2、测试用例:2.1、必须写在测试类里面2.2、函数名称必须是test开头2.3、执行顺序,按照ASCII码顺序执行2.4、执行器配置:File—setting—tools—Python原创 2021-05-12 17:46:19 · 1530 阅读 · 0 评论 -
Excel 基本操作
一、excel操作1、编写测试用例(跟功能测试一样,正常,异常)2、读取测试用例(excel)3、发请求 (requests)4、获取响应结果 (获取接口返回数据)5、和预期结果进行比对(断言) (实际结果与预期结果比对)6、保存测试结果 (获取断言结果再保存)workbook: 工作簿,一个excel文件包含多个sheet。worksheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。cell: 单元格,存储数据对象二、openpyxl原创 2021-05-07 18:01:42 · 307 阅读 · 0 评论 -
多态
1.同名方法在不同类中,实现得功能不一样class A: def test01(self): print('吃饭')class B: def test01(self): print('睡觉')def C(obj): obj().test01()if __name__ == '__main__': C(B)2.子类继承父类,调用父类同名的方法调用父类的方法:(子类里面)self.方法名()(子类外面)类实例.方法名()原创 2021-04-26 17:30:42 · 59 阅读 · 0 评论 -
动态设置类属性、实例属性
1.获取对象的属性可以获取类和类实例的属性:类/类实例.__dict__2.设置属性(若属性已经存在就是修改,若不存在就是添加)setattr(cl,‘sex’,‘男’)第一个参数:对象(类或者类实例)第二个参数:属性名称第三个参数:属性的值(添加到内存里面)3.属性值获取getattr(cl,‘name’,‘default value’)第一个参数:对象(类或者类实例)第二个参数:属性名称第三个参数:默认值(当属性不存在的时候,会返回这个默认值)4.属性判断hasattr第原创 2021-04-26 16:59:43 · 436 阅读 · 0 评论 -
类属性、实例属性;继承;类方法、实例方法、静态方法
一、概念1.类:拥有相同属性和功能的对象的集合2.对象:是类的实体3.封装:隐藏了对象的属性和实现细节,只是对外提供接口或入口4.类的创建:class 类名称:class 类名称()5.类属性:定义在类里面,在方法(函数外面)的属性访问:类名称.类属性名称可以直接访问,不需要实例化6.实例属性...原创 2021-04-20 18:03:00 · 249 阅读 · 0 评论 -
异常处理
一、异常处理1.Try:2.手动抛异常raise Exception ('自定义异常')原创 2021-04-20 17:47:02 · 63 阅读 · 0 评论 -
模块导入和路径处理
一、模块导入1.1 模块.py .pyc1.2 包__ init__.py二、模块导入2.1 分类自定义的、第三方库、python自带2.2 导入方式1. import 模块名 a.导入的是py文件 b.查看python默认找包的目录: import sys2. from 模块名 import 类、变量、函数3. from 模块名 import *4. from 项目名.包.py文件名称 import 类、变量、函数三、os模块 路径处理3.1 路径获原创 2021-04-19 18:11:13 · 105 阅读 · 0 评论 -
函数的基本操作
一、函数1.定义:一段可以被另一段代码执行的代码2.语法def 函数名(参数): 函数体 return 需要返回的值3.调用函数名(参数)4.参数4.1 必传参数a、必要传对应个数的参数b、参数要以正确的顺序传入,参数的位置要与实际期望值一一对应4.2 关键字参数(顺序不需要对应)def test_function(name,age) print(name,age)test_function(age=20,name="Alice")4.3 不定长参数(可以不传参数)a.原创 2021-04-12 17:32:32 · 110 阅读 · 0 评论 -
选择结构和循环结构基础(debug断点)
一、复合的if else语句用户输入的数据默认都是str类型num =int(input('please input:'))if num>0: print('num>0')elif num==0: print('num>0') else: print('num<0') 二、debug技能1.step over(F8):重新执行下一步2.rerun(CTRL+F5):重新执行当前.py文件3.stop(CTRL+F2):终止执行三原创 2021-04-09 17:22:38 · 111 阅读 · 0 评论 -
集合
一、特点1.无序2.元素不可以重复3.不支持索引取值二、相关操作1.创建set1={1,2,3}2.添加元素set1.add3.删除pop、remove、clear4.去重列表list=[1,1,1,2,2,3,3,4,4,5]new_list = list(set(list1))数据类型转换1.int 、str 相互转换2.list 、tuple、set 相互转换...原创 2021-04-08 17:19:01 · 62 阅读 · 0 评论 -
字典的使用
一、特性1.通过键值对来表示元素2.key唯一且不可修改,若重复认为是同一个元素二、增1.dict_1={'key':'val1','key2':'val2'}2.dict_2=dict(a=2,b=1)3.list1=['a','b','c'] #key list2=[1,2,3] #val res=dict.fromkeys(list1,list2)三、删四、改五、查通过key来拿valdict_1={'key':'val1','key2':'val2'}1原创 2021-04-04 20:25:09 · 94 阅读 · 0 评论 -
列表和元组的基本运算
1.成员运算(返回布尔值)1.1. in1.2. not inlist=[1,2,3,4,5]print(1 in list)print(1 not in list)2.排序通过ASCII的值获取对应的字符print(chr(97))通过字符获取对应的ASCII码print(ord("a"))正序:在原有列表的基础上排序,没有返回值list=[4,2,33,51]list.sort()倒序:list=[4,2,33,51]list.sort(reverse=True)原创 2021-04-02 15:47:55 · 365 阅读 · 1 评论 -
Python的字符串常用方法、字符串格式化
一、大小写相关的1.验证码 不区分大小写全部大写:变量名.upper()全部小写:变量名.lower()str=“python”str1=str.upper()Pycharm 代码中间换行快捷键:ctrl+shift+enter2.首字母大写变量名:变量名.capitalize()3.每一个首字母大写:变量名.title()4.大小写互换:变量名.swapcase()str=“python Hello”print(str.swapcase())二、统计相关的count()原创 2021-03-29 17:14:56 · 269 阅读 · 0 评论