# Tester_python **Repository Path**: leith14/tester_python ## Basic Information - **Project Name**: Tester_python - **Description**: homework for excercises - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-12 - **Last Updated**: 2021-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 学习笔记 # 1. Python基础知识 ## 环境管理 ## 基本数据类型与操作 变量(数字不能开头,大小写敏感), image-20210625173716576 image-20210625174615745![image-20210625175223563](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210625175223563.png)![image-20210625175406986](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210625175406986.png) ## 控制流语法 ### 分支结构 image-20210625175931246 ### 循环结构 image-20210625175909623 image-20210625180134919 image-20210625180334515 ## 函数 ### 默认参数 image-20210625201630430image-20210625201652311 ### 关键字参数image-20210625201838245image-20210625201944566image-20210625202012785 image-20210625202043635 ### image-20210626124436318lambda ## 常用数据结构 ### list #### 常用函数 image-20210626124855542image-20210626124923340 #### 列表推导式 ![image-20210626125053981](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626125053981.png)![image-20210626125121697](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626125121697.png) ### tuple ![image-20210626125152019](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626125152019.png) #### 元组不可变特性 ![image-20210626125502952](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626125502952.png) #### 常用函数 ![image-20210626125604273](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626125604273.png) ### set ![image-20210626125835353](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626125835353.png) #### 推导式 ![image-20210626125904734](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626125904734.png) ### dictionary #### 定义 ![image-20210626130055126](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626130055126.png) #### 常用函数 ![image-20210626130242601](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626130242601.png)![image-20210626130437631](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626130437631.png image-20210626130500274![image-20210626130533331](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626130533331.png) ## 装饰器,迭代器 ## 魔法方法 ### if __name__ == '__main__' 如何正确理解? https://www.zhihu.com/question/49136398 https://zhuanlan.zhihu.com/p/344951719 ## 模块 ### 项目目录结构 image-20210626131429381 image-20210626131441079 image-20210626131520982 image-20210626131538928 image-20210626132256614image-20210626132345997 image-20210626132808561 sys.path可以查看搜索路径 image-20210626132859097 ### 文件引用 ## 输入与输出 ### 字面量打印与格式化 image-20210626133031003 image-20210626133041374 image-20210626133241283![image-20210626133417245](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626133417245.png) ![image-20210626133555934](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626133555934.png) #### format![image-20210626134523014](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626134523014.png) #### 格式化f“{}” image-20210626134734185![image-20210626134855809](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626134855809.png) ### 文件读取 #### 操作步骤 image-20210626135021465![image-20210626135054134](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626135054134.png)![image-20210626135627378](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626135627378.png) ![image-20210626135910805](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626135910805.png) image-20210626135811830 ### JSON格式转换 ![image-20210626140016733](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626140016733.png) ![image-20210626140214713](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626140214713.png) ## 错误与异常 ### 语法错误与定位 #### 错误 ##### 语法错误 SyntaxError ##### 逻辑错误(就是要找的bug) ##### 系统错误 OOM #### 异常 程序执行过程中,出现的未知错误,逻辑和语法都正常,但是业务逻辑不完善,引起的bug #### 异常与错误的区别image-20210626141338066 ### 异常捕获、异常处理 image-20210626141510801 IndexError:list index out of range KeyError, ValueError, image-20210626142404126 raise 关键字抛出异常 ### 自定义异常 image-20210626142605884 ## 程序调试 ![image-20210626142831546](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626142831546.png) image-20210626143516558image-20210626143542251 Debug模式:步过,步出,步入。压栈 ## 面向对象编程 image-20210626145024931image-20210626145145592 image-20210626150142689类变量需要类来访问,实列变量需要实例来改变image-20210626150350951类方法不能访问实例放法,需要加装饰器,@classmethod ## 面向对象三大特性 image-20210626150636269 ### 封装 重复代码抽取成一个方法。 ### 继承 重写方法 ### 多态 重写方法就是多态的体现 ## 标准库 image-20210626152005439 ### OS image-20210626152103334 ### Time image-20210626170729340 ### urllib,推荐使用Requests ### math image-20210626171704065 ## 多线程处理 进程和线程 image-20210626171910685 image-20210626172127974 image-20210626172419480image-20210626172455508image-20210626172519940image-20210626172604530 image-20210626172639721image-20210626172659064 image-20210626180046244![image-20210626180350257](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626180350257.png) 同步原语:锁,信号量 ## 第三方库 ### 常用第三方库总结一下 ## pip 依赖管理与虚拟环境 ## python unittest 测试框架 # 2. Pytest测试框架 ## 常用参数 > Note > > The `-q/--quiet` flag keeps the output brief in this and following examples. > > $ pytest -q test_sysexit.py pytest --markers 查看所有markers - [ ] 还可以自定义marker,后续自己研究一下 ## pytest markers skip,usefixture, parametrize https://docs.pytest.org/en/stable/mark.html#mark ## pytest fixtures: explicit, modular, scalable 里面有段对测试的解释,说的很好,之后编写测试用例要严格按照这四个步骤来执行: 1. **Arrange** 2. **Act** 3. **Assert** 4. **Cleanup** fixtrue的传递,cached,可以同时使用多个fixtures,fixtures scope(session具体的生命周期?),autouser=true,yield 使用,safe teardown(每一步,每个状态拆开写fixture,**atomic operations**,)conftest.py作用范围是自己及subpackage的有所tests, https://docs.pytest.org/en/stable/fixture.html#fixture ## Allure https://docs.qameta.io/allure/#_pytest # 3. Linux基础知识 ## 系统与 Shell 环境准备 image-20210626181041697 ![image-20210626181135853](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626181135853.png) ### shell image-20210626181233584 image-20210626181252730 image-20210626181352819 ## 进程与线程 ## 常用命令之文件处理 ### 接连服务器 image-20210626181733319 ### 文件 #### 查看帮助 “命令” --help,man “命令” #### 文件管理 image-20210626182149391image-20210626182413552 tar -zcvf [压缩包名字] 【要压缩的文件】 #### 文本处理 image-20210626182658890 gg到文件开头,G到文件结尾 #### 文件属性 image-20210626183112253 #### 修改文件权限 image-20210626183236859 ### 网络 ifconfig,image-20210626183420726 image-20210626183456679 ## 常用命令之性能统计 ### CPU #### top image-20210622132853919 image-20210626184236905image-20210626184319804image-20210626184524486image-20210626184538428image-20210626184650104 ### 内存 image-20210626184408958![](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626184818153.png) ### IO image-20210626185033818image-20210626185100356 image-20210626185234701 ### 网络IO image-20210626190036144 ## 常用统计命令 image-20210626190850824 ### sort image-20210626193455063 ### uniq ### wc ## 三剑客与管道使用 image-20210626201450334 ### 管道 image-20210626201748501image-20210626201759178 ### 正则表达式 image-20210626202059596 image-20210626211054630image-20210626211125634 ### grep ![image-20210626224007995](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626224007995.png)image-20210626224018430 ### awk image-20210626230206597image-20210626230217510![image-20210626230323803](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626230323803.png)****image-20210626230337314image-20210626230437778image-20210626230533236![image-20210626230932951](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626230932951.png) ![image-20210626231024032](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626231024032.png)image-20210626231055442 ![image-20210626231724187](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626231724187.png) ![image-20210626232102426](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626232102426.png) ### sed ![image-20210626225022097](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626225022097.png) image-20210626225034071 ![image-20210626225110078](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210626225110078.png) image-20210626225145131image-20210626225158615 /-e bn上下翻页,jk上线翻页。注意并没有对原文件处理 i是在行前添加,a是在行后添加。 -i参数使用一定要谨慎 image-20210626230015105 image-20210626230058689 ## Bash 编程语法 ## Bash 脚本编写 ## Linux 进阶命令 ## Linux 环境配置 ## shell 实战 # 4. Web 自动化测试 ## selenium 的安装 > **三大组件** Selenium WebDriver,Selenium IDE,Selenium Grid。 image-20210528142834549 > **安装步骤:** 1. pip install selenium 2. 安装chromedriver ## selenium IDE 用例录制 image-20210529153841722 ## selenium 测试用例编写 > demo1 ```python from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep class TestHogwarts: def setup(self): # 注意chrome 禁止自动化测试问题 self.chrome_options = webdriver.ChromeOptions() self.chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) self.driver = webdriver.Chrome(options=self.chrome_options) self.driver.implicitly_wait(5) self.driver.get("https://www.baidu.com") def teardown(self): self.driver.quit() def test_baidu(self): self.driver.find_element(By.ID,'kw').send_keys('霍格沃兹测试学院') self.driver.find_element(By.ID,'su').click() self.driver.find_element(By.LINK_TEXT,'霍格沃兹测试学院 - 主页') ``` ## 隐式等待与显式等待 隐式等待,显示等待的优缺点 | | | | | ---: | ---- | ---- | | | | | | | | | | | | | ## web 控件定位与常见操作 css selector,优势是快一些,注意空格和>的区别 image-20210531201802649image-20210531201935129 Xpath,注意/和//的区别 image-20210531163507174 **对比Xpaht和css selector的语法,强化一下记忆** ## web 控件的交互进阶 ActionChains: 应用于PC端 image-20210601163454134 TouchActions:应用于移动端 ## 网页 frame 与多窗口处理 image-20210607193304973 image-20210607193606004 image-20210607193715700 ## selenium 多浏览器处理 ```python class Base: def setup(self): browser = os.getenv("browser") if browser == "firefox": self.driver = webdriver.Firefox() elif browser == "headless": self.driver = webdriver.PhantomJS else: self.driver = webdriver.Chrome() ``` ## 执行 javascript 脚本 image-20210607215441944 image-20210607224101635 image-20210607224128260 ## 文件上传弹框处理 image-20210608164634060 image-20210608164654085 image-20210608164528121 ## page object 设计模式 引出page object的原因, 元素名称老是会改变。老该代码很麻烦。 image-20210608190935968image-20210608191342537image-20210608191354100 **把操作细节和验证分开。** 官方文档介绍:https://www.selenium.dev/documentation/en/guidelines_and_recommendations/page_object_models/ Martin Fowler提出的思想:https://martinfowler.com/bliki/PageObject.html ## page object 原则 image-20210608192722843 ## [Web 企业微信实战【1】](https://ceshiren.com/t/topic/11771) ## [Web 企业微信实战【2】](https://ceshiren.com/t/topic/11827) PageObject设计模式:业务场景和具体操作分层。 算法的作用:提升运行效率,节省内存空间 设计模式的作用:提升代码可维护性,可测性,可插拔 # 5. App 自动化测试 ## appium 环境安装与架构介绍 image-20210610225446666 image-20210610225545888 image-20210610225817754 image-20210611125701104 image-20210611130048119 ## appium环境搭建 image-20210611130247111image-20210611130454356 ```shell 连接MuMu模拟器 adb connect 127.0.0.1:7555 adb shell ``` ## [appium 第一个测试用例](https://ceshiren.com/t/topic/12652) ## appium 用例录制 image-20210611174451512 image-20210611174526649 image-20210611184359021 ```shell adb logcat |grep -i displayed 查看app入口 adb shell dumpsys activity top 获取当前页面元素 adb shell am start -W -n com.xueqiu.android/.main.view.MainActivity 启动应用 ``` ## 元素定位方法与隐式等待 image-20210611185855306 image-20210611185913668 image-20210611200048252 image-20210611200249684 ## app 控件定位 image-20210611200903121 image-20210611201654909image-20210611202026133image-20210611202250688 image-20210611212039077 image-20210611214351970 ## app 控件交互 https://github.com/appium/appium-uiautomator2-server image-20210611215641784 ## 触屏操作自动化 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/touch-actions.md ## 高级定位技巧 主要使用Xpath image-20210613220318672 image-20210613222423113 image-20210613222552522 image-20210613222859133 ## 显式等待机制 ## 特殊控件 toast 识别 ``` adb shell dumpsys window|grep mCurrent ``` image-20210614145252407 ## 属性获取与断言 image-20210614152657096 ## 参数化用例 ## android webview 测试 image-20210614221509612 image-20210614221529060 image-20210614221655657 ## 微信小程序测试 https://ceshiren.com/t/topic/3994 image-20210615145007646 image-20210615151655418 ## capability 使用进阶 image-20210615153206332 image-20210615153838329 ## 企业微信移动 app 实战 1 https://ceshiren.com/t/topic/11907 ## 客户端专项测试 image-20210622105042968 # 5. 接口协议抓包分析与mock ## 常见接口协议解析 ![image-20210618130439933](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210618130439933.png) ## 抓包分析 tcp 协议 image-20210618131100673 image-20210618131839297 image-20210618132958017 ## 使用 postman 发送请求 断言,变量(代码添加,点击编辑),cookie鉴权,参数传递(token鉴权),用例集,数据驱动(json,csv),代码导出。 ## 使用 curl 发送请求 curl多用于脚本,nc tcp/udp协议发送 image-20210618160619979image-20210618160651320 ## 常用代理工具 image-20210618162146545image-20210618162418019 image-20210618162640623 ## http/https 抓包分析 ## 雪球抓包和mock实战 > ###### Charles ![image-20210618174314708](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210618174314708.png) 状态码:4xx 客户端问题,5xx服务端问题 弱网测试,breakpoint,rewrite(测前端非常好用)。 image-20210618204325703https://ceshiren.com/t/topic/12358 map local,map remote > mitmproxy image-20210618224923525 # 6. 接口自动化测试 ## 接口测试框架 推荐Requests框架 ## 接口请求构造 image-20210621123751506image-20210621123809884image-20210621180620342 ## 接口测试断言 ## json/xml 请求 image-20210621182427261 ## json/xml 响应断言 image-20210621183310221image-20210621184050138 ## schema 断言 image-20210621184800184 ## header cookie 处理 ## 认证体系 image-20210621190221176 ## 企业微信接口测试实战 jsonpath比较适合复杂的查询。两层for循环最多,再多用jsonpath 封装思想参考requests.request方法的封装思路 Yapi,rap # 7. docker 容器技术 ## docker 常用命令 image-20210602173006360 image-20210602174840112 image-20210602180055069 ```shell docker exec -it 28c811d36091 /bin/bash # 感觉先进去,再用Linux命令更舒服一些 ``` image-20210603145031668 ## 搭建 Web 服务器 nginx ## 搭建测试用例管理平台 testlink image-20210603140712932 image-20210603140723912 ## 搭建持续集成平台 Jenkins image-20210603142313030 ## docker-compose 使用 image-20210603151446210 ## docker 的 registry 介绍 image-20210603152819532 ```sh sudo apt-key fingerprint 0EBFCD88 #校验key root@1e3a71b80d70:/# apt-key fingerprint 0EBFCD88 # 返回结果 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) sub rsa4096 2017-02-22 [S] ``` > 安装Docker遇到的问题 1. **localectl set-locale LANG=en_US.UTF-8** 如何解决 要设置系统语言环境,请使用localectl命令。例如,如果您希望使用UTF-8编码的美国英语(US),则运行以下命令。 下载的centos docker镜像系统默认使用的是ISO/IEC 15897字符集 需要改成UTF-8. **先安装所有的字符集** ```sh dnf install langpacks-en glibc-all-langpacks -y ``` **设置字符集** ```sh localectl set-locale LANG=en_US.UTF-8 ``` 2. **Docker容器里的centos、unbuntu无法使用 systemctl 命令的解决方案** 据说在 Linux Docker中无法使用 systemd(systemctl) 相关命令的原因是 1号进程不是 init ,而是其他例如 /bin/bash ,所以导致缺少相关文件无法运行。(System has not been booted with systemd as init system (PID 1). Can't operat) 解决方案:/sbin/init 例如:Ubuntu 18.04 , **docker run -tid --name test --privileged=true ubuntu:18.04 /sbin/init** **docker exec -it test /bin/bash** **PS:--privilaged=true一定要加上的。** ———————————————— ## dockerfile 语法与指令 image-20210603163206813 image-20210603163259423 ## docker 镜像构建 image-20210603181055269 ## 6月3日 直播课 ### **搭建 selenium grid hub** https://github.com/SeleniumHQ/docker-selenium ### **三个面试题** 1. --link hub的本质是 -e 复制环境变量到node,所以直接可以用 -e master节点的环境变量复制到node节点 2. IE 为什么没有docker? 3. 是否可以用docker 测试不同系统的兼容性? 4. 没安装抓包工具,怎么解决网络问题? ### **三种网络模式** > 桥接网络 ![image-20210616150345214](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210616150345214.png) > Host ![image-20210616151834445](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210616151834445.png) > **container** ![image-20210616151900964](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210616151900964.png) 在测试开发中,非常有用, 共享网络 ![image-20210616152422359](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210616152422359.png) 共享文件目录 ![image-20210616153021704](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210616153021704.png) 共享进程 故障注入image-20210616153147445 每个容器本质就是一个进程,被各种名称空间包裹着,相互打破名称空间的隔离,相互配合。service mesh。 image-20210617055934196 ## 6月6日 直播课 ![image-20210616143235363](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210616143235363.png) ![image-20210616143535777](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210616143535777.png)![image-20210616144107893](C:\Users\Leith14\AppData\Roaming\Typora\typora-user-images\image-20210616144107893.png) ### 镜像构建 > 搭建镜像仓库 ### Docketfile image-20210617150227630的优势:有缓存,方便调试。缺点,每run一层就多一层IO开销 image-20210617155240305联合文件系统、镜像分层,一个RUN指令就是一层image-20210617165434784为什么这样设计?复用基础镜像,节省磁盘空间。软件设计(解耦,复用)image-20210617171819258只需下载app层就可以 image-20210617183608178 ## K8S简介 # 8. 持续集成实战 ## CI实战 https://ceshiren.com/t/topic/13068 ## Jenkins UI 自动化测试持续集成体系建设 https://ceshiren.com/t/topic/13064 # 9. 接口测试框架 ## 测试用例自动生成 打造数据驱动的测试框架 - 企业微信文档 → swagger open api → generate client - 企业微信文档 → 自定义yaml数据 → 数据驱动框架(httprunner mtf) 结合测试平台 - 企业微信文档 → api object python源代码 → tdd + api object风格的测试用例 大部分实践采用的方式 ### swagger ### HttpRunner ### api object python源代码