
python
笔墨难染
python自动化测试
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
记录一个编码引起的错误
出现问题的背景我在做接口测试的时候, url 的后面部分是在 postman 上面粘贴来的然后接口发过去就是 404 , 在postman 又是可以在日志里看到 url 也是对的最后是在控制台对比了, 才看出来, 是编码格式的原因造成的, 导致了 url 中间断开....原创 2021-09-07 18:49:11 · 169 阅读 · 0 评论 -
windows和linux下的目录区别
我在windows下能跑的一段代码, 在linux 上跑不了, 提示文件找不到.然后我检查了之后,发现了问题所在原来是windows 给我做了 文件名匹配了原创 2021-09-03 10:31:31 · 145 阅读 · 0 评论 -
获取python的安装目录和包的安装路径
一般情况下, 在windows系统中,我们自己安装, 也都会知道安装目录, 怎么配置环境变量, pip install 下载的包,会在哪里.以及,如果我们在linux 上, 直接进行安装的话, 也是可以知道的.但是有一种情况下,可能安装成功后, 有可能会不知道python的安装路径.这两天,我尝试使用一个centos 容器, 来搭建CI 环境,在安装python的时候, 遇到一些问题.在编译的时候, 发现容器里缺少一些库,导致 make && make install 失败,原创 2021-08-09 22:16:58 · 741 阅读 · 0 评论 -
python中元祖的使用注意事项
还有一个要注意的事项这个时候, 看到格式有些不规范, 强行变换了格式之后, 结果出现了,把整个 要赋值的元素都给赋值了 待赋值的变量, 结果就偏离了原来想要的原创 2020-09-14 09:53:31 · 142 阅读 · 0 评论 -
PyQt5中菜单栏,通过triggered绑定槽, 传递的数据会因为菜单对象的层级不同传递不同
我个人猜测是因为方便区分 传递的是是什么, 如果是一级菜单, 就把这个一级菜单里被点击的菜单对象传递, 如果是二级菜单,就传递布尔值.先记录下来, 或许会有网友解答, 或者日后自己深入学习了QT5, 知道了为什么....原创 2021-02-06 16:51:11 · 2223 阅读 · 2 评论 -
如果QtDesigner里没有QWebView这个主键,但是自己又很想在用,怎么解决
我安装的是 QT5.9, 但是安装成功后, 并没有 看到主键列表里有![在这里插入QWebView 这个主键, 但是我又很想用它, 把 QT5.9 重装几次, 增加了其他安装组件,都是没有这个主键.但是我又很想用它,怎么解决呢?因为我当前的 PyQt5 的版本里并没有这个类, 如果有 , 就不需要安装这里的案例是使用在主要窗口的...原创 2021-01-19 18:22:12 · 2296 阅读 · 1 评论 -
更正自己对接口和api的理解
以前,一直都是把一个方法, 或者一个类都理解成api , 但是两者看起来是类似的, 但是又有一些不一样的地方.api 就是程序中暴露出去,给别人调用的 方法或者属性,比如python或者java 官方给的api 的, 通过它们实现功能, 也可以是我们自行开发的程序中, 暴露出去给用户使用的api接口, 例如就像我们奥邮的sdk,用户只能看到 开门 连柜子 获取蓝牙信息的 方法,用户自然会去调用这些方法 开门等等而一般意义上 的接口就是后台给的接口, 获取数据和资源....原创 2021-01-13 11:59:15 · 483 阅读 · 0 评论 -
scrapy分布式学习遇到的一个坑,暂未解决,先记录
项目需求, 使用分布式, 对某个网站进行爬取 , 然后把数据都一起传递到同一个 redis 仓库中, 使用的scrapy -redis 组件.运行环境, 本地 用虚拟机 Centos7.7 搭建了redis ,项目中新建了一个 爬虫工程,爬虫文件中, 在爬虫类中新增一个 redis_key 的属性, 进行数据解析,配置文件中, 指定管道类和配置 redis 的服务器 信息,准备执行爬虫工程, 需要去到 爬虫工程下的spiders 目录下,执行 scrapy runspider xxx原创 2020-12-28 22:17:32 · 266 阅读 · 2 评论 -
记录一个selenium和scrapy 框架一起使用出错的记录,以及解决它的方法
报错信息是 “DevTools listening on ws://127.0.0.1:56330/devtools/browser/7f4b459a-f6eb-4314-8ddc-a5e627e3457a[1152:7936:1223/203758.618:ERROR:device_event_log_impl.cc(211)] [20:37:58.618] USB: usb_device_handle_win.cc:1020 Failed to readdescriptor from node co原创 2020-12-23 21:21:42 · 6756 阅读 · 2 评论 -
记录学习scrapy 框架遇到的坑,已解决
使用的框架是爬虫框架 scrapy ,案例需求是将爬取到数据, 一份存储到本地, 一份存储到Mysql 数据库中,爬取的网站是糗事百科的段子版本,本地数据库环境 mysql5.0 ,并且在数据库里新建了满足这个案例需求的表,随后编辑pipelines.py 文件, 新增一个PileLine 类燃火在 settings.py 文件中增加这个类被调用确定在爬虫文件中, 有用 yield item出现的问题如下:那个连接数据库的管道类, 能够在open_spider方法中连接上原创 2020-12-19 10:33:04 · 332 阅读 · 3 评论 -
extract(),用于scrapy框架中的数据解析
scrapy 框架中, response 可以直接用 xpath进行定位, 不需要像 requests 中, 还需要 response.txt.但是 scrapy中, response.xpath() 返回的是一个列表, 列表里每一个元素都是一个Selector 类型的对象, 数据都在这个对象的 data属性里.我们就可以使用 extract() 将Selector 类型的对象中 data 参数存储的字符串提取出来,如果列表对象直接使用 extract() , 则表示将列表中每一个Selector原创 2020-12-16 18:22:30 · 755 阅读 · 0 评论 -
python中, 将列表转换成字符串,“ “.join(list_data)
python中, 将列表转换成字符串," ".join(list_data)原创 2020-12-16 18:12:23 · 626 阅读 · 0 评论 -
爬虫中提取父类以下的所有子类的文本信息 element//text(),提取自身是element/text()
爬虫中提取父类以下的所有子类的文本信息‘//*[@id=“primaryChannelMenu”]/span[5]/div[2]/a/span//text()’原创 2020-12-16 16:34:19 · 494 阅读 · 0 评论 -
python 正则表达式的使用
在爬虫中, bs4 和 xpath 并不能定位到 js 代码, 因此如果我们想要提取的信息正好在 js 代码里, 就只能用正则表达式了.一般我们直接搜索网上, 都看到一大堆很长很长的, 都不知道怎么用, 我也是一边看, 一边自己摸索, 猜测一下语法.src = ‘https://video.pearvideo.com/mp4/adshort/20201209/1607559275348-15521372_adpkg-ad_hd.mp4’我们要提取这个字符串里 2020xxx 后面的, 怎么做呢? 而原创 2020-12-10 10:16:50 · 239 阅读 · 1 评论 -
解决安装pipenv 出错问题
pipenv是python中, 基于项目的虚拟环境管理, 对于项目交接来说, 更加方便, 比集中式虚拟环境管理还要方便.安装pipenv 的命令是 pip install pipenv但是使用这个命令安装, 容易出错此时就会导致这个 pip 命令所属于的python解析器里的 pip 命令失效.由于我在本地环境中安装了python3.6和3.7, 都配置了全局变量, 只是我把python3.6作为默认使用的python 版本, 而python3.7 是修改了 安装路径下的 python.ex原创 2020-11-29 19:29:27 · 5555 阅读 · 4 评论 -
pycharm2017操作虚拟环境及其注意事项
这个时候,我们新建项目的时候, 就可以选择我们刚刚创建的虚拟环境原创 2020-11-29 19:17:21 · 163 阅读 · 0 评论 -
文件操作,容易出现的错误之数据丢失
这是因为先以读的形式打开文件, 还没读取, 紧跟着就以写的形式打开这个文件, 导致这个文件直接被清空,随后的读取和写入其实就没有意义了,在复制粘贴的时候, 要注意, 不要文件名都没校验就执行代码了...原创 2020-11-01 09:36:10 · 338 阅读 · 0 评论 -
python中,super().method()只能对一个父类的资源进行累加,不能对多继承时的其他父类方法进行叠加
原创 2020-10-30 16:24:28 · 217 阅读 · 0 评论 -
模块和模块之间相互引用, 会导致报错
明明能找到包,为什么会提示没有这个属性? 在其他模块都可以正常使用的, 在这个模块就不可以了呢?猜测应该是模块之间相互引用的问题, 那么就来验证一下吧.我这个导包失败的 文件在Utils 下面, 我在Utils的__init__ 中添加了导包的快捷方式在Base_web下的base_web 模块中, 同时也导包了 Utils 模块,而我导包出错的那个模块属于 Utilis 包, 并在它的__init__ 文件中进行了快捷导包,所以此时就形成了一个模块之间的相互引用.解决方法有两种:一.原创 2020-09-28 15:08:33 · 1446 阅读 · 0 评论 -
用pytest跳过整个模块的时候,要注意的事项
可以用 @pytest.importorskip(“mode_name”, minersion=“1.5”) 进行跳过, mode_name 如果不存在就会跳过, 所以这个参数随便写就可以了, 只要不是和存在的模块同名就可以, 但是不可以写中文, 写中文会报错,minversion: 表示需要导入的最小的版本号,如果该版本不达标,将会打印出报错信息;reason: 只有当模块没有被导入时,给定该参数将会显示出给定的消息内容。 这个 reason 可以不写.使用这个跳过整个模块的时候, 就写这两个..原创 2020-09-28 11:59:19 · 283 阅读 · 0 评论 -
python的类对象中, statice 静态方法, 不能调用自己
在一个类中, 静态方法不可以自己调用自己, 更别说递归调用原创 2020-09-17 14:27:09 · 366 阅读 · 0 评论 -
python3不支持在遍历时修改字典
dict_data = { “dd”:"" , “cc”:"", “ee”:""}我想for i in dict_data :dict_data[i] = “007”运行报错说, python3 不支持遍历字典的时候修改字典,解决方法如下:在键名前面加上 list() 即可原创 2020-09-10 11:33:51 · 855 阅读 · 0 评论 -
python参数化要注意的事项,使用占位符后, 有多个参数不要忘记使用 ()
要传递多个参数的时候, %(var1, var2)不要图方便,省略了 () , 虽然语法上不报错,但是执行就会出错原创 2020-09-04 15:41:05 · 517 阅读 · 0 评论 -
列表赋值不可以借助迭代器直接赋值, 必须是通过Index进行赋值
假设现有一个列表, list_a =[0,2,3,5]我想把最后一个元素5 替换成 6, 而 元素5 的坐标是 3 ,此时我想通过 for i in list_a , if i == 5 ; i =6 这样进行赋值, 虽然pycharm 中没有报错, 但是赋值失败这是因为, 要对列表里的元素重新赋值, 必须是通过 index , 也就是坐标才可以的...原创 2020-09-04 10:04:21 · 198 阅读 · 0 评论 -
python中实参和形参的内存指向和使用问题
这个是在我预想之中的,但是我最近在看数据结构和算法的时候, 发现用冒泡, 插入,选择等排序方法的时候, 我只需要传递一个列表作为形参进去, 并不需要我返回更正顺序后的列表, 原来的列表就被改变了顺序, 但是归并算法就需要返回一个最终排序后的列表.那么我现在就用内存指向来看看, 到底是为什么呢?普通数据类型做参数的时候, 形参的更改并不影响实参,为什么列表就可以在形参修改以后, 实参同时受到影响呢?然后我就这样试了试, 发现如果参数是list , 实参和形参就是同步变化的,难怪我排序的时候, .原创 2020-08-26 14:50:25 · 488 阅读 · 0 评论 -
pytest中参数化的使用误区
(1)pytest.mark.parametrize()这个方法可以把我们传递过来的元祖/字典 用一个变量接收, 我们就直接使用这个变量, 或使用索引或使用key 就可以了, 相当之方便, 而且如果传递过来的是一个元祖, 还会自动遍历元祖.(2) parametrize.expand() 这是unitest框架里使用的参数化方法, 但是由于pytest 兼容 unitest , 因此也是可以使用, 但是用了这个方法之后,就没法用pytest.mark.skip() 来跳过这个方法了, 因为优先级的问题原创 2020-08-19 15:21:12 · 517 阅读 · 0 评论 -
使用pymysql连接数据的时候,如何指定特定端口(UAT环境下, Mysql不是3306端口号)
如果要连接的mysql数据库的端口号不是3306, 则需要自行指定端口号,不可以直接在 host后面用: 加端口号, 这样是不行的,一样会连接失败并报错, 只可以在port = 3456 这样指定端口号而且一般的UAT都是限制了直接用账号密码连接数据库, 必须用xshell 连接之后, 建立一个隧道, 之后才可以连接到数据库...原创 2020-08-13 15:39:07 · 3156 阅读 · 0 评论 -
None 和““ 的进行比较的误区
今天写脚本, 发现了一个小的问题, 就是 这个 None 和 “” 进行比较的时候,我以为两者是一样的,用了一个 if var != “” : do something我的本意是如果 var 不是None的时候, 就执行某个动作,但是等于None 都直接执行这个动作了然后才发现, 不可以直接用 None 和 “’” 做比较,否则会事与愿违如果要确认是否等于None, 可以用 is None 来做校验...原创 2020-08-04 10:59:22 · 281 阅读 · 0 评论 -
Pytest(Uintest)中,steup方法使用不当而出现的一个问题,全局变量被重置
在setup方法中, 用到了全局变量,对其进行了赋值, 然后在testcase1 里面, 对其进行了调用,然后testcase2在 testcase1之后执行的时候, 同样使用了这个全局变量, 在接口请求中将这个变量发送出去, 服务器进行校验,此时就会因为 testcase1 和testcase2 两次发送的请求参数不一致, 导致接口请求报错,因为服务器要对前后两次的变量进行验证, 是不是同一个(业务逻辑是这样的).本质上就是因为setup方法在每一个testcase执行之后就会重新启动,它就是每个原创 2020-07-30 15:38:28 · 511 阅读 · 0 评论 -
接口测试容易出现的小错误, response.json后面没有写()
此时, 我手快, 在response.json后面少写了(),然后此时打印就没有获取到json , 反而是拿到 <bound method resposn.json of <reponse [200]>>然后找了一会, 都没发现这个问题, 最后才发现是response.json后面 少了()...原创 2020-07-30 14:40:15 · 4374 阅读 · 2 评论 -
request库的使用注意事项之get请求易错点
使用get 请求的时候, 传递请求头要指明参数去接收,否则会直接接口异常,整个崩溃.因为如果不用 headers = headers 去接收, 就会把 实参headers里面的数据以复合数据类型的形式发送, 请求头一般是 dict 类型, dict里的键值对有几个, 就传递几个,从而导致出现接口要求的参数和要传递的参数个数不匹配, API直接崩溃...原创 2020-07-28 22:36:43 · 436 阅读 · 0 评论 -
实例化类的时候, __init__里的属性不要使用全局变量做参数化
实例化类的时候, __init__里的属性不要使用全局变量做参数化,否则容易造成获取的变量不是None , 要么就是被你重新赋值之前的, 并不会随着你改变了全局变量而跟着改变,因此往往导致使用到的变量值不是我们想要的...原创 2020-07-28 20:23:21 · 334 阅读 · 0 评论 -
pytest的工厂方法使用注意,不可以传参数,也不可以使用类属性
工厂方法的缺点是 不可以传参进去, 否则就会报错但是我今天想着, 既然我不可以传参进去, 那么我就使用类里面的属性, 直接解决传递参数失败的问题,我想直接在工厂方法里使用类属性, 就解决了没有参数可以传递的困扰, 发现工厂方法无法使用类属性, 导致接口就没有session, 无法发送成功...原创 2020-07-27 11:53:40 · 363 阅读 · 0 评论 -
None和““在使用的时候要注意
None 是python的数据类型的一种, 而 “” 是空字符串,如果是在代码里用于自测的话, 最好是使用None,不然打印出来就是完全看不到的原创 2020-07-24 09:25:46 · 164 阅读 · 0 评论 -
python中索引越界的常见原因
在python中, for i in range(n) , 使用迭代器的情况下, 是包小不包大,这个是很常见的, 一般都不会在这里犯错.但python中, 也有 for in in data , 直接遍历数据里的每一个一级元素.用这两个方法, 一般是不会犯索引越界的错误的.但在我们不知道一个数据的长度的时候, 又想通过随机数来抽取它的Index 来引用它的数据的时候, 此时我们可以使用 randoom.randint(min,max)但是随机数是包含最小值和最大值的, 一旦随机出最大值, 就会索原创 2020-07-24 08:41:00 · 4307 阅读 · 0 评论 -
接口测试中,少传递了请求头,会提示JSONDecodeError
然后仔细一看, 就是 json 少了 , 然后检查一下, 是少了请求头了原创 2020-07-13 16:03:49 · 399 阅读 · 0 评论 -
pytest下,最好不要使用建立普通文件作为suit, 否则会有异常
要建立suite都是建立 Python Package , 不要建立目录如果建立有目录, 后面其他的又有Python Package, 就可能会导致导包失败如果都是目录, 会不会没有问题? 不知道.起初我都是写在script 下, 后面根据app , web , docking 以及业务进行了划分, 有一些还是留在了script 包下, 此时候还没有问题,当我想把最后一些划分之后重新运行看看, 结果反而直接异常报错, 就是接口的自定义包给导包出错, 我根据提示百度, 说是相互引用,但是我翻看了.原创 2020-07-13 14:35:55 · 233 阅读 · 0 评论 -
pytest.mark.skip()失效的原因
这是因为使用pytest框架的时候, 还使用了parameterized 来做参数化,但是parameterized是属于unitest框架里的参数化库, 所以基于unitest才开发的pytest就会默认先执行parameterized, 因此就出现了设定的跳过失效的问题...原创 2020-06-11 09:40:08 · 729 阅读 · 0 评论 -
json串的地址和list.append(json)的地址都是一致的
list.append()的本质就是建立一个索引,去指向你想要往列表里添加的数据.我有一个需求, 想要生成一个列表嵌套字典的数据, 这个数据里包裹着十个字典, 这十个字典只有一个键的键值不一样,其他的键值对都一致, 应该如何实现呢?我本来是打算通过list.append()添加十次来实现, 想着每次append之前修改我想要修改的键值对,但是我发现最后生成的数据文件里,这个键值对的数值全部都一样,而且都是最后一次的数据.由于python的 time.time()只能获取到秒的时间戳,所以我就给它加原创 2020-06-10 22:42:57 · 439 阅读 · 0 评论 -
多层调用的返回值缺失问题
在基类里, 我定义了一个方法a, 有返回值的, 在PO模式的操作层里我定义一个方法b, 方法b调用了这个基类方法a, 没有接收返回值.此时就缺失了返回值.在业务层里定义了一个方法c, 方法c调用了方法b , 然后想利用方法b 的返回值进行断言,就因为多层调用时缺失了返回值导致失败.在多层调用的时候, 返回值的缺失要注意...原创 2020-06-05 17:17:50 · 217 阅读 · 0 评论