04 2020 档案
摘要:题目 根据要求实现对应的方法 1.等长的两个列表合并为一个字典。要求:合并成{"A": 1, "B": 2, "C": 3},请用一行代码实现 keys = ["A", "B", "C"] values = ["1", "2", "3"] 2.合并两个列表并消除重复值 list_1 = ["a",
阅读全文
摘要:题目 请写出以下代码的运行结果 思路 记住一点,直接赋值,是所有对象都指向同一对象的引用,因此,原对象一变,所有对象都会变 浅拷贝,是父对象拷贝出来,独立了,而子对象还是指向同一对象的引用,因此,原对象一变,父对象不变,只有子对象会变 深拷贝,是所有对象都拷贝出来,独立了,因此,原对象一变,所有对象
阅读全文
摘要:题目 请写出下列代码的运行结果 思路 题目不难,但很容易漏,就像在 中,实际上给关键字参数 kwargs什么都没传,打印时,仍然会打印个空字典 ,同样在 中,可变参数 args位置上什么都没传,仍然会打印个空元组 值得注意的还有 , 和 ,由于都没有解包,所以当做一个元组 传进去了 结果
阅读全文
摘要:题目 题目:passwd={"admin":"123321", "user1":"123456"} 1.设计一个登录程序,不同的用户名和对应密码存在一个字典里,输入正确的用户和密码去登录 2.首先输入用户名,如果用户名不存在或者为空,则一直提示输入正确的用户名 3.当用户名正确的时候,提示去输入密码
阅读全文
摘要:题目 给定一个只包含正整数且非空的数组,返回该数组中重复最多的前N个数字(返回结果按重复次数从多到少排列,N不存在取值非法的情况),请用熟悉的语言实现该需求。10分钟之内写出来 思路 1.假设列表(数组)为a,使用set将该数组过滤,得到一个新的列表sorted_a,这个sorted_a是不重复的
阅读全文
摘要:前言 虽然一直在做app自动化,但没能总结过appium中的元素定位方式,appium中一部分定位方式和selenium类似,一部分又不相同。因此本文将总结appium中常用的元素定位方式,同时与selenium做一个横向的比较 通过resource id定位 resource id也称为id,re
阅读全文
摘要:什么是lambda lambda是一种生成函数对象表达式形式,它返回的一个函数。由于它没有变量名,有时也被叫做匿名函数 lambda语法 以lambda关键字开头,之后是一个或多个参数,接着是一个冒号,最后是一个表达式 注意: 1.lambda是一个表达式,而不是一个语句 2.lambda的主题是一
阅读全文
摘要:
阅读全文
摘要:报错 尝试写了一个切换上下文的代码,结果报错了 排查原因,才发现我的appium server上根本没装chromedriver,appium日志里也显示了这一点 确定内置浏览器版本 方法一 一般从应用信息里就能看出来版本,但我这里看不出来内核版本,所以才有第二种方法 方法二 打开模拟器或者真机内置
阅读全文
摘要:前言 在上面三篇文章中,我们尝试了使用pytest xdist来做WEB分布式自动化测试、APP分布式自动化测试。在这篇文章中,对于pytest一些其他的语法,比如load模式、each模式、同步运行、直接运行、配置文件等做一说明 项目环境 |角色 | 系统 | Python版本 | ip | |
阅读全文
摘要:前言 在上篇文章 "《使用pytest xdist实现分布式APP自动化测试:基于SSH》" 中,尝试了使用SSH来实现master和worker的通信网关,现在来看下使用socket怎么实现。其实在最开始的 "《使用pytest xdist实现分布式WEB自动化测试》" 已经提到过socket,这
阅读全文
摘要:前言 pytest xdist是一款分布式测试插件,它有两种方式实现master和worker的远程通讯,一种是SSH,另一种是socket。本文将介绍如何使用SSH实现用例同步、用例执行以及报告收集 项目环境 系统环境 |角色 | 系统 | Python版本 | ip | | | | | | |
阅读全文
摘要:什么是sshfs ssfhs是一个客户端,可以让我们通过SFTP(SSH文件传输协议)挂载远程的文件系统,从而实现本机和远程的文件系统的交互 安装sshfs 有密码挂载远程文件系统 无密码挂载远程文件系统 1.生成rsa公钥 2.将公钥复制到服务器上,期间会输入密码一次 3.然后再挂载,就不会输入密
阅读全文
摘要:前言 pytest xdist是一款优秀的分布式测试插件,它可以实现进程级别的并发,也可以实现类似于master worker主从分布式测试。目前中文网站对于进程级别的并发介绍的比较多,对于主从分布式测试的资料少之又少。经过反复的实践,对于主从分布式环境的部署和运行有了一定的认知,因此,在本文中将着
阅读全文
摘要:背景 如果你想给测试报告配置环境(ENVIRONMENT)和分类(CATEGORIES),需要怎么做呢?非常简单,请按照我们的步骤来 配置ENVIRONMENT 在allre results目录下(对于我们的项目来说,是allure_reports目录,即生成json和txt的目录),添加envir
阅读全文
摘要:安装jenkins的Allure插件 进入jenkins的插件管理,切换到可选插件,查找Allure插件,点击下载待重启后安装 这里出现了问题:手动安装插件时报错 因为版本的问题,至少要升jenkins到v2.138.4 之后才可以安装Allure,但是镜像库里没有那么新的版本。只能在centos7
阅读全文
摘要:安装jenkins 在centos7中安装jenkins,使用rpm的方式 启动jenkins 这时候发现报错了: 定位问题 根据提示使用 查看报错信息,发现是找不到java目录 解决办法 解决办法一 查找我们自己的java安装路径,然后设置软链接 我用的就是这种 解决办法二 使用vim编辑jenk
阅读全文
摘要:添加日志 添加日志同样是在Common目录下,创建一个存放日志的目录Logs和日志类MyLogger,实现的方式并不复杂,不再赘述,只是添加下源码 修改测试请求类TestMyRequest,加入日志并执行,可以看到一些效果 生成测试报告 在项目目录下新建一个存放报告的目录HTMLReposts,再创
阅读全文
摘要:实现测试请求类的两种方式 在TestCases目录下创建测试请求类TestMyRequest,然后获取列表[字典]形式的测试数据,最后使用for循环遍历每一组测试数据 使用unittest运行后,可以发现多条测试用例被合并成了一条测试用例,这显然是不符合我们期望的,我们期望Excel中的每一行的数据
阅读全文
摘要:一种冗余的设计 比如我们有注册接口:http://localhost:8099/futureloan/mvc/api/member/register , 其请求方式支持GET/POST,其参数分别为: | 变量 | 变量名 | 类型 | 说明 | 可否为空 | | | | | | | | 手机号 |
阅读全文
摘要:安装步骤 搜索镜像 下载镜像 创建数据挂载目录 运行容器 这里需要查看容器内数据的路径是在/var/jenkins_home下 v /opt/jenkins:/var/jenkins_jome表示将/var/jenkins_home的数据挂载在/opt/jenkins下 d表示在后台运行容器,并返回
阅读全文
摘要:python脚本 docker中没有专门的命令来查看远程仓库的标签,如果使用git pull centos来拉取,一般拉取的都是镜像的latest标签 但是有一个网页链接可以查询到对应镜像的标签信息:https://registry.hub.docker.com/v1/repositories/【镜
阅读全文
摘要:操作系统 推荐使用Ubuntu、Debian和RHEL(Centos、Fedora等) 在Windows和OS X中也可以使用,但要安装Docker Toolbox工具 内核 推荐3.8及以上的内核,虽然只是要求内核 =2.6,但是虽然一些老版本的也能运行,但运行结果会有很大的不同 内核必须支持并开
阅读全文
摘要:安装allure命令行 上传allure的zip包 使用rz命令将allure commandline 2.12.1.zip上传到服务器的/opt目录下 解压 配置环境变量 将解压后allure下bin目录的路径 配置进环境变量 验证 在命令行输入allure version,能出现版本说明allu
阅读全文
摘要:准备工作 安装jdk 前面已经介绍了 安装mysql 需要安装mysql 5.6以下的版本,安装教程请见:https://www.cnblogs.com/my_captain/p/12753884.html 新建jara库 下载jira 安装jara 安装过程中会提示提示一些默认还是自定义安装的问题
阅读全文
摘要:准备工作 检查本地是否有mysql 如果系统自带了mariadb,使用yum卸载它 下载mysql 下载cmake 安装ncurses devel 安装cmake ` 在进行到./configure时,会报一个错误: 这是没有装c++编译器,使用yum安装 安装mysql 编译安装 添加mysql用
阅读全文
摘要:安装wget 进入到yum.repos.d目录 下载Centos 7.repo 备份CentOS Base.repo 重命名Centos 7.repo 清除缓存 建立缓存 更新yum 参考文章 "《超简单CentOS7 配置阿里云yum源》"
阅读全文
摘要:查看原来的ip 刚安装好桌面版的centos7时,发现ip是随机的,为了后面使用方便想把ip固定下来,就可以使用桥接模式下的静态ip 步骤 虚拟机设置为桥接模式 检查虚拟网络编辑器 在WM虚拟机上菜单栏点击编辑 虚拟网络编辑器(N),打开并检查虚拟网络编辑器,桥接到后面选择真实的网卡 查看配置文件
阅读全文
摘要:准备工作 升级Python版本 Centos7中自带的Python版本是2.7.5,app自动化是用Python3写的,因此需要升级Centos7的Python版本 pip配置国内源 为了提高pip安装速度,将pip配置为国内镜像源 安装依赖库 在本地项目根目录下的命令行中,使用pip freeze
阅读全文
摘要:查找镜像 使用docker search命令可以搜索appium镜像 拉取镜像 在拉取镜像的时候,碰到了报错 ,有人说这可能是docker版本太低导致的,由于Centos6支持的docker版本有限,所以换了个Centos7继续pull。centos7安装docker请戳这里 "《Centos7下安
阅读全文
摘要:登录DaoCloud官网 官网地址:https://www.daocloud.io/mirror 点击加速器图标 复制脚本 执行脚本 发现报错了: 安装SSL证书 在https://curl.haxx.se/ca/cacert.pem下载最新的cacert.pem(用迅雷下载),然后使用rz命令上传
阅读全文
摘要:检查内核版本 输入命令 检查内核版本,得到centos6.6的内核版本是2.6.32 504.el6.x86_64,由于docker需要的内核版本是3.10,因此需要升级内核 升级Linux内核 安装ssl 导入公钥数字证书 安装ELRepo源 网上很多过时的方法,使用 安装,这个命令执行后会报个4
阅读全文
摘要:前言 在实际工作中,如果要用appium实现多设备的兼容性测试,大家想到的也许是“多线程”,但由于python中GIL的影响,多线程并不能做到"多机并行",这时候可以考虑使用多进程的方式 为什么基于pytest 我们知道,pytest中的conftest.py可以定义不同的fixture,测试用例方
阅读全文
摘要:初始化本地仓库 git init 远程地址连接 git remote add 仓库名称 远程地址url #添加远程地址 git remote #查看远程地址 分支 git checkout -b 分支名称 #创建并切换本地分支 git push 仓库名称 分支名称 #创建远程分支 git branc
阅读全文
摘要:题目一 What gets printed?() A. new line then the string: woow B. the text exactly like this: r"\nwoow" C. the text like exactly like this: \nwoow D. the
阅读全文
摘要:安装 首先保证node.js已经安装并且已配置环境变量,验证的方法是: 然后使用 安装appium server,安装完成后输入appium,能输出版本信息说明已安装好 安装appium doctor,它是用来检测环境的,使用 ,安装后这样检测 启动appium server 在cmd中输入appi
阅读全文
摘要:pytest添加运行失败截图 在conftest.py中,定义截图的方法,失败时自动截图,并将截图保存到html页面中 注意的是fixture修饰的方法中,不要忘了global driver 运行之后显示测试报告的图片是宽度和高度过大,导致图片比较难看,因此我们需要优化下 自定义css 在html_
阅读全文
摘要:背景 在需要每次都要进程一组设备测试的时候,需要用到fixtures参数化,比如需要对夜神和Honor 5C进行APP自动化测试,这时候参数化就可以起到很好的用途 这个两台设备实际应用中代码和报告: params=["Honor_5C", "YeShen"] #登录:无toast弹框,不重置 @py
阅读全文
摘要:autouse=True,可以使作用域内的测试方法都运行该fixture,而无需手动添加fixture的方法名或者使用pytest.mark.usefixtures。《pytest测试实战》中有个很好的例子: #test_autouse.py import pytest import time #在
阅读全文
摘要:使用正则匹配时,虽然正则没报错,但发出了一个警告: 根据这篇文章《Python正则表达式报错:invalid escape sequence '\d' (无效的转义字符'\d')》,原因是Python3将字符串解释为Unicode字符串,因为正则中的\D或者\*就被视为转义的Unicode字符,解决
阅读全文
摘要:首先安装失败重试插件: pip install pytest-rerunfailures 有三种方式来使用失败重试 第一种:在测试方法上使用@pytest.mark.flsky()装饰器 @pytest.mark.flaky(reruns=1) #失败重跑一次 @pytest.mark.flaky(
阅读全文
摘要:怎么运行都不行,无论是右键点击main.py还是在命令行运行python main.py,都报这个错 网上有人说是多个python版本共存的问题,我排查了下,环境没毛病,最后突然想起是不是没装pytest-html,果然装了下就可以运行了 pip install pytest-html
阅读全文
摘要:使用PyYAML解析yaml文件时,报错: fs = open(r"E:\virtual_workshop\APP_AutoTest\caps\caps.yml") caps_data = yaml.load(fs) print(caps_data) #运行结果 D:\program\Python3
阅读全文
摘要:一. 定义 pytest的fixture中有一个参数scope,它的作用域有五个,分别是:function、class、module、和session function:每个方法开始之前都会调用一次,方法级别 class:每个类开始之前都会调用一次,类级别 module:每个模块(py文件)开始之前
阅读全文
摘要:在之前的学习中,代码中一直是传入了fixture函数common_driver,又使用了pytest.mark.usefixtures: @pytest.mark.usefixtures("common_driver") def test_welcome(self, common_driver):
阅读全文
摘要:之前遇到了很多次类似的问题,即pytest加载conftest.py的时候报如下的错误 我的目录结构是这样的: APP_AutoTest/ |- TestCases/ |- __init__.py |- conftest.py |- test_login.py |- test_welcome.py
阅读全文
摘要:看WebDriverWait(self.driver, wait_time).until(EC.visibility_of_element_located((by, locator)))源码的时候,不太明白visibility_of_element_located((by, locator))内为什
阅读全文
摘要:在项目下新建一个pytest.ini的配置文件,里面如下配置即可。markers=后面是标签名,如有多个,第二个开始要换行,且要缩进,不然会报错 [pytest] markers=welcome login
阅读全文
摘要:一. 引出问题 为了测试一种情况,我在目录TestCases下新建了一个test_login.py和test_welcome.py,然后发现在模块里面各自运行时,都是正常的,在命令行运行时,后者可以正常,前者总是出错: 二. 测试代码分析 先看看两个模块的代码是怎么设计的 test_login.py
阅读全文
摘要:一. 上节回顾 文件系统和磁盘的理论知识 二. Redis响应延迟案例 1. 什么是Redis Redis是一个高性能的key-value数据库,和memcached类似,它支持存储的value类型相对更多,包括string(字符串),list(列表),set(集合),zset(sorted set
阅读全文
摘要:一. 上节回顾 内存溢出的问题定位 二. 文件系统以及磁盘I/O 1. 概念 磁盘和文件系统管理,是操作系统最核心的功能之一 磁盘:提供了最基本的持久化存储 文件系统:是在磁盘的基础上,提供了一个用来管理文件的树状结构 2. 索引节点和目录项 我们都知道,在Linux中一切皆是文件,不仅普通的文件和
阅读全文
摘要:一. 上节回顾 1. 内存 2. 场景一:磁盘和文件写案例 3. 命令:vmstat 二. 上节的两个问题 问题一:buffer是磁盘读数据还是写数据的缓存? 问题二:cache是对文件读数据的缓存,是不是也会缓存写文件的数据? 问题一分析步骤: java进程内存溢出,问题定位以及分析(mat) 1
阅读全文
摘要:一. 上节回顾 1. PHP的问题定位 2. CPU的三个主要案例: (1) mysql (2) java (3) PHP 二. 内存 1. 物理内存 生活中,我们知道内存有4G和8G,这里提到的是内存容量,其实指的是物理内存 物理内存:也称为主存,大多数计算机的主存都是动态随机访问内存(DRAM)
阅读全文
摘要:一. CPU性能指标 1. 首先,最容易想到的是CPU使用率,也是实际环境中最常见的一个性能指标 CPU使用率是非空闲时间占总CPU时间的百分比,根据CPU上运行任务的不同,又被分为用户CPU,系统CPU,等待I/O CPU,软中断和硬中断 用户CPU使用率:包括用户态CPU使用率(user)和低优
阅读全文
摘要:一. 准备 1. 在data目录下,使用rz上传项目zip包 2. 解压 3. 进入到解压后的目录nginx-php-cpu,查看Makefile操作步骤 4. 配置docker镜像加速 我们使用DaoCloud进行加速,具体DaoCloud怎么获取镜像源地址,请看这篇Docker从理论到实践(三)
阅读全文
摘要:一. 上节回顾 怎么查看CPU使用率? top:显示了系统总体的CPU和内存使用情况,以及各个进程的资源使用情况。默认每隔3s刷新一次 ps:只显示每个进程的资源使用情况 top并没有细分进程的用户态CPU和内核态CPU pidstat:可以分析每个进程的CPU使用情况 通过top,ps,pidst
阅读全文
摘要:一. 上节回顾 1. CPU上下文切换:CPU寄存器和程序计数器 2. CPU上下文可以分为几个不同的场景:进程上下文切换,线程上下文切换,中断上下文切换 3. 线程是调度的基本单位,进程是资源拥有的基本单位 二. 自愿上下文切换和非自愿上下文切换 vmstat:只给出了系统总体的上下文切换情况,要
阅读全文
摘要:一. 上节回顾 1. 什么是进程?什么是线程?它们之间的区别? 2. CPU命令 查看物理CPU的个数 查看每个物理CPU的核数 查看逻辑CPU的个数 3. CPU架构 从处理器层面查看 从操作系统层面查看 4. uptime load average:三个负载的含义 平均负载和CPU使用率 5.
阅读全文
摘要:一. CPU理论知识点 二. 进程和线程 1. 什么是进程? 进程是正在进行的一个过程或者说一个任务,而负责执行任务的是CPU 2. 什么是线程? 线程是进程里面执行的最小单元,例如:一条流水线工作的过程(流水线的工作需要电源,电源就相当于CPU),而一条流水线必须属于一个车间,一个车间的工作过程就
阅读全文
摘要:一. 上节回顾 1. 监控的场景,不推荐LoadRunner自带的监控,使用nmon来监控我们的Linux系统 2. nmon + 分析思路,最后定位到性能问题(mysql数据库的用户表没有加索引导致的性能问题) 3. 生成LoadRunner自带的分析报告,生成了数据的监控,关注TPS和响应时间
阅读全文
摘要:一. 场景设计回顾 1. 在我们实际工作中,一般是先做单场景(单接口)的性能测试,当没有问题后,或者优化之后,再做混合场景,这是基于以下两点考虑 (1) 为了更好的排查问题,更好的优化问题 (2) 当多个接口混合的时候,也会出现一些相互调用的其他问题 2. 稳定性场景:建议也是用混合场景,一般跑8个
阅读全文
摘要:一. 混合场景 1. 一般有这样的场景:比如说(登录:30%,下订单:50%,查看订单:20%) 比如并发用户2万,需要确定:你实际的登录用户有多少?浏览商品的用户有多少?下订单有多少? 2. 一个脚本可以用多个LoadRunner Generators 现在我们这里只有一个混合场景,一个混合场景里
阅读全文
摘要:一. 什么是controller controller是一个核心组件:简单来说就是调用脚本,模拟用户的真实行为,对服务器产生压力,并且收集服务器资源使用情况,比如:TPS、响应时间、事务数、成功率 二. 场景 1. 手工场景(百分比模式) 2. 面向目标场景 三. 集合点 1. 什么是集合点? 模拟
阅读全文
摘要:一. 项目流程 登录-->修改支付密码-->下订单-->支付订单-->查看订单列表 支付密码:md5进行加密算法。 1. 为什么要学习java vuser协议? 为了解决工作中需要调用开发的算法,进行脚本的开发 2. 工作中会遇到:需要对支付密码进行md5算法的调用,以及更复杂的情况(实际项目中可能
阅读全文
摘要:一. 步骤 1. 下载MySQL loadrunner libraries http://files.cnblogs.com/files/xiaoxitest/MySQL_LoadRunner_libraries.zip 2. 解压zip包,把其中bin、include文件夹下的文件拷贝到loadr
阅读全文
摘要:一. 加不加事务运行Controller时的区别 不加事务的情况 点击Load Generators,选择Add Name栏输入127.0.0.1,点击OK,然后Close 点击Connect 把TPS的图标拖到右边,可以看到这个场景里把注册、登录、重置支付密码都当成了一个事务 加事务的情况 在注册
阅读全文