python及测试框架简明

    科技2022-07-13  128

    安装了多个版本的python,使用哪个是根据环境变量PATH决定的     python -V   # 查看版本     which python   # 查看python的安装路径     多版本python安装管理可以参考5-6PPT中Pyenv

    python:是C语言编写的python语法解析器,又为Cpython Jython:是Java语言编写的python语法解析器 pypy:  是python语言编写的python语法解析器

    编译生成平台如:ARM的指令集、X86指令集能执行的二进制文件      如:Java开发的app编译成apk后,可以在Android上运行,不能在IOS上运行,因为Android有dalvik的解释器,iPhone没有     如:微信app可以运行在真机上,因为真机是基于ARM指令集的,不能运行在Android studio自带的模拟器上,因为模拟器是基于X86指令集的。微信是故意不编译适合X86二进制文件,只编译出适合ARM二进制文件,而其他app一般都会既编译X86的二进制文件,也编译出ARM的二进制文件      python库版本的隔离管理:     如selenium2、selenium3同时存在进行隔离     virtual env虚拟环境     python3 -m venv tutorial-env  # 创建新的环境     -m 是调用 venv库 tutorial-env是新建的虚拟环境包,这个包包含了python3的文件     然后执行(对window系统):tutorial-env\Scripts\activate.bat     这就进入了虚拟环境中的python了,可以:which python 看看     就可以在里面安装库了,可以:find . -maxdepth 5 | less 查看安装目录     pycharm 自动具备这个功能      .so结尾的为二进制文件      python环境管理与pip依赖管理     python -V 产看python版本     python3.6是最稳定的     编译器、解释器     语言→中间字节码→执行引擎     语言→指令集     引擎是执行编译文件的      python创建虚拟化环境(venv):     管理需要用到不同版本的库     可参考官网官方教程来做     pycharm自带这个功能     可以在pycharm的终端与github连接

        self.assertEqual(4, x, f'x={x} expection=4')  # 期待值4写前面,真实值x在后     f:  # cmd下进入F盘     unittest单元测试准备的,单元测试框架不一定只用来做但单元测试,还可以用来做集成测试

    'TestCase':所有测试用例的基本类,给一个测试方法的名字,返回一个测试用例实例

     'TestSuite':组织测试用例的实例,支持测试用例的添加和删除,最终将testRunner进行测试执行

     TextTestRunner:进行测试用例执行的实例,其中Text的意思是以文本形式显示测试结果。

    'defaultTestLoader':测试用例加载器,其包括多个加载测试用例的方法。返回一个测试套件

        python main.py  # 执行     pytest是集成测试准备的,也可以单元测试;兼容unittest更强大     类都不需要写,看到test_*py、*_test.py、test函数头、不含__int__有Test的类就是用例;就是test和test_都会识别     pytest main.py   # 执行       把pytest继承到IDE, 设置一下,因为系统默认是unittest     如下的测试装置执行步骤:名字是固定的     def setup_module():     def setup_function():     def test_01():     def setup_function():     def test_02():     class():         @classmethod         def setup_class(cls) -> None:   -> None说明返回None类型,以后最好带上这样调用的语句会有类型方法提示         def setup(self) -> None:         def test_01(self) -> List:         def setup(self) -> None:         def test_02(self) -> None:          一个test可以放多条断言     测试用例的全面和严谨性完全是根据业务需求确定的     有些就是不需要写那么严谨      TDD模式:是先写测试用例,再写测试代码    

    跑部分用例设置:     可以在用例函数上一行加上@pytest.mark.passCase  #做标志为passCase     pytest main.py -m "passCase"  # 只跑标志为passCase的用例          生成junit.xml文件:     pytest --junitxml=unit/junit.xml  unit/  # 跑unit/下的文件,在unit文件夹中生成junit.xml文件      参数化: @pytest.mark.parametrize("num1, num2, expect", {     (10, 2, 5),     (0, 3, 0),     (5, 2, 2.5) })      # 这里的{}可以改为[]、()都是可以的 还可以用json格式和yaml格式: @pytest.mark.parametrize("num1, num2, expect", json.load("1.json")) def test01(num1, num2, expect):

    allure2测试框架:支持多语言、牛逼的框架     cmd与powershell是两个不同的终端     cmd是不支持shell和Linux指令的,powershell和git bash才支持可以的     pip install allure-pytest     pytest test.py --alluredir=./unit/allure_results   或者 pytest --alluredir=./unit/allure_results 

        若报错:syntax error near unexpected token `(' ,则应该指令编译器的位置:#!/bin/python     也可以把测试结果生成文件,然后建一个服务器来打开     allure generate ./unit/allure_results/ -o ./unit/allure_html  #生成报告,推荐此方法,然后在pycharm选择chrome打开

        allure serve ./unit/allure_results/   # 此方法为临时查看,自动弹出报告。ctrl +c结束或就查看不了报告了

    https://www.csdn.net/gather_2f/MtjaggzsNTg2NjQtYmxvZwO0O0OO0O0O.html 

        或者:下面方法为临时查看。ctrl +c结束或就查看不了报告了     cd /unit/allure_html     python -m http.server  # 搭建模拟器     要把ip改为127.0.0.1:8000才可以访问          把pycharm 中terminal配置为git bash     用conftest.py文件可以实现失败截图和重跑功能     

    有时在pycharm中的页面安装不了的库,可以在pycharm的终端用指令安装

    pip list # 查看安装了哪些包 window :  \\ = /  所以用\\可以改为/ 或r'\'

    # todo:也应该用起来了 隐式等待:implicitly_wait,所有find elenment都会默认0.5s巡查一下元素是否出现,出现就返回,底层设计自动帮你等待 显式等待:指定这个状态下去等待,在客户端本地每0.5s巡查一下条件是否匹配(你设定的条件是:presence或visibility或clickable)这样才返回,webdriverwait

    ========================================================== ==========================================================

    selenium框架:     client(python,java) -> selenium -> driver(chromedriver) -> browser(chrome)     解压:unzip 包名          如果不是在chrome浏览器进行验证     $('css语法')  $x('xpath语法')  # 在按F12 中的console 下输入          元素出现的过程:     title出现       dom出现      presence     css出现         visibility     json出现     clickable          鼠标键盘模拟:ActionChains          def setup_class(cls):         browser = os.get_env("browser").lower()         if browser == "firefox":             cls.driver = webdriver.Firefox()         if browser == "chrome":             cls.driver = webdriver.Chrome()          执行js脚本:execute_script      def test_01(self):         for code in [             'return document.title',             'return document.querySelector(".active").className',             'return JSON.stringify(performance.timing)'  # 获取当前网页的执行时间,性能测试用到         ]:             result = self.driver.execute_script(code)             print(result)          参数配置:     option = webdriver.ChromeOptions()     option.add_argument("--headless")   # 配置成无界面测试     option.add_argument("--disable-gpu")  # 添加gpu     option.add_argument("--window-size=1280, 1696")   # 调大窗口     cls.driver = webdriver.Chrome(options=option)          设置每次在都当前浏览器页打开,这样可以跳过验证登陆页     chromeOptions = Options()     chromeOptions.add_experimental_option("debuggerAddress", "127.0.0.1:9222")     cls.driver = webdriver.Chrome(options=chromeOptions)     然后在终端打开浏览器,要保证浏览器的页面只有一个     cd C:\Program Files (x86)\Google\Chrome\Application     chrome --remote-debugging-port=9222  然后打开网站登陆,

    page object page的原则:     网页的公共方法由page 提供     page的内部细节没必要暴露;     _param # 这样的参数是外部人员看不到的     不要把page 的元素暴露给外部     page层不做断言     返回的应该是其他的PO或者是用于断言的数据     同样的行为不同的结果,可以建模为不同的方法

    封装模式:     driver:完成对web、android、IOS,driver接口的封装,也就是base层     page:调用driver的封装,完成对网页的封装     case:调用page的封装,完成case的编写     data:配置文件和数据驱动

        优点:架构清晰,减少很多重复的代码,便于维护和分工      绕过验证码:     debugger复用浏览器     使用cookie     使用万能码          

    Processed: 0.011, SQL: 8