一、Python - 知识点总结

1.  Python常用基础知识1(标准数据类型)

  

Numbers(数字)

类型

  •   int:通常被称为是整型或整数,是正或负整数
  •   float:浮点型由整数部分与小数部分组成 
  •   complex:复数    

String(字符串)

定义:字符串就是多个字符组成,字符可以是数字、字母、下划线   

内置函数:

  •  string.join(seq)     
  •  string.startswith()  
  •  string.upper()

 List(列表) 

形式:

  •  list1= ['hangzhou', 1, '2' ,True, False , ['a', 1, 3]]
  •  list2= list()  或  list2 =[]   空列表
  •  list3= [1]   含一个元素的列表         
访问:列表中的值b= ['hangzhou', 1, '2' ,True, False ,['a', 1,3]]
  •  b[6]: 超出长度报错
  •  b[0:-1:2](步长)
  •  b[5][-1]  

方法:

  • ist.append(obj)  在列表末尾添加新的对象
  • list.insert(index,obj)  将对象插入列表
  • list.extend(seq)  在列表末尾一次性追加另一个序列中的多个值
  • list.count(obj)  统计某个元素在列表中出现的次数
  • list.index(obj)  从列表中找出某个值第一个匹配项的索引位置
  • list.pop([index=-1])  移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
  • list.remove(obj)  移除列表中某个值的第一个匹配项
  • list.reverse()  反向列表中元素
  • list.sort(cmp=None, key=None,reverse=False)  对原列表进行排序

Tuple(元组)

与列表的区别:

  • 元组使用小括号,列表使用方括号;
  • 元组与列表类似,不同之处在于元组的元素不能修改,不能删除元素值,但是可以删除整个元组或元组中列表、字典项中的项组
  • 创建很简单,只需要在括号中添加元素,并使用逗号隔开即可         

 访问元组中的值(同列表):

  • tup1= ('physics', 'chemistry', 1997, 2000)
  • tup2= ()     空元组   或   tup2=tuple()
  • tup3= (1,)    含一个元素的元组            

Dictionary(字典)

形式:

  • 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 
  • dict2= {'Name': '小明',  'Age': 7,'Address':'滨江区', 'Address':'西湖区'}  
  • dict3= {}   或  dict3= dict()    空字典

方法:

  •  dict.items()  以列表返回可遍历的(键, 值) 元组数组
  •  dict.keys()  以列表返回一个字典所有的键
  •  dict.values()  以列表返回字典中的所有值
  •  dict.clear()  删除字典内所有元素
  •  dict.get(key,default=None)  返回指定键的值,如果值不在字典中返回default值
  •  dict.has_key(key)  如果键在字典dict里返回true,否则返回false
  •  dict.update(dict2)  把字典dict2的键/值对更新到dict里
  •  pop(key[,default])  删除字典给定键 key 所对应的值,返回值为被删除的值。 key值必须给出。 否则,返回default值。
  •  popitem()  返回并删除字典中的最后一对键和值。        

访问:

  • 字典中的值:dict2= {'Name': '小明',  'Age': 7, 'Address':'滨江区',  'Address':'西湖区'} 
  • dict2['Name']
  • dict2['Weight'] 不存在的key值会报错
  • dict2.keys()              
  •  dict2.items()    
 Set(集合)  


         

2. Python常用基础介绍2

  

1. 逻辑控制







1.1 真值计算:任何非零数字或非空对象都为真;数字零、空对象([]、{}、””)以及特殊对象None都被认为是假

1.2 布尔运算 : X or Y     如果X或Y是真,就是真       X  and Y  如果X和Y都为真,就是真  not  X      如果X是假,就是真
1.3 比较运算符:  ==,!=,>, <, >=, <=
1.4 条件测试:根据条件,判断真假

1.5 if 语句:通用格式: if elif elif else   元运算符: b = x if y else z 

1.6 while 循环:通用格式:while  else   break:跳出最近所在的循环   continue:跳到最近所在循环的开头处

1.7 for循环: 通用格式:for else         举例:for item in 数组 /range(5) / 字符串 / 字典;  for index,value in enumerate(my_string) 

1.8 闭包函数

1.9 with语句(with as 语句):、自定义上下文管理器来对软件系统中的资源进行管理,比如数据库连接、共享资源的访问控制等:

http://c.biancheng.net/view/5319.html     http://c.biancheng.net/view/4817.html 

2.0 装饰器
  • 装饰器概念
  • 装饰器的分类
  • Python中常见装饰器

2. 函数



2.1 格式:def  函数名(参数列表)    功能代码    return 返回值

2.2 参数 :

  • 形参:函数需要传递的参数;
  • 实参:调用函数时传递的参数
  • 位置实参:函数调用的每个实参都必须关联到函数定义中的一个形参,最简单的就是基于实参的顺序。注意:位置实参的位置不正确,将导致结果不正确
  • 函数形参传值:函数调用时,通过键-值的方式传递参数,不用按照位置的顺序
  • 给形参指定默认值:编写函数时,给形参指定默认值,如果调用时没有传递该参数,则取默认值
  • 位置参数和关键字参数混用:1)必须将 位置参数 写到前面,关键字参数 不用按照顺序来指定; 2)每个参数只能接收一个值,不可重复
  • 不定量的参数传递:*arg: 一个非键值对的可变数量的参数; **kwargs: 不定长度的键值对参数
  • 值传递 :不可变参数通过值传递:数字、字符串、元组; 
  • 引用传递:可变参数通过引用传递:列表、字典      

2.3 作用域

  • 局部作用域:在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用
  • 全局作用域:在 Python代码主体中创建的变量是全局变量,属于全局作用域,全局变量在任何范围(全局和局部)中可用
  • 在函数内部修改全局变量:global x

enumerate() 函数:https://www.runoob.com/python/python-func-enumerate.html   

isinstance() 函数:https://www.runoob.com/python/python-func-isinstance.html

3 类




3.1 类定义:

  • class关键字定义类,类名通常是大写字母开头的单词
  • superClass表示继承自哪个类,若没有,则隐含继承object超类

3.2 简单例子

  •  __init__():类的实例化操作会自动为新创建的类实例发起调用 ,进行初始化也可以有额外参数进行初始化,我们还可以通过类的任何实例来访问这些变量 当根据 类创建新实例时,Python 都会自动运行它
  • self:引用当前方法的调用者 ;以 self 为前缀的变量都可供类中的所有方法使用,

3.3 类变量和实例变量

  • 类变量用于类的所有实例共享的属性;
  • 实例变量是每个实例的唯一数据

3.4 访问属性:可以用.来访问对象属性;可以添加、删除、修改对象属性

3.5 继承属性:即一个派生类(derivedclass)继承基类(baseclass)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待
3.6 多重继承:圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索, 即方法在子类中未找到时,从左到右查找父类中是否包含方法

4 模块



4.1 导入模块

  •  import语句  import fibo fibo.fib(10)
  • from…import语句   from fibo import fib   fib(10)
  • from…import*语句   from fibo import*    fib(10)
  • from . import module_name。导入和自己同目录下的模块。
  • from .package_name import module_name。导入和自己同目录的包的模块。
  • from .. import module_name。导入上级目录的模块。
  • from ..package_name import module_name。导入位于上级目录下的包的模块。。
  • 当然还可以有更多的﹒,每多一个点就多往上一层目录。
4.2 脚本执行模块:模块既可以被其他脚本导入使用,也可以作为脚本直接执行;注意:如果模块是被导入,fib(20)则不会被执行
4.3 模块的搜索路径  : import  sys  >>>  sys.path

5 内置函数和内置模块

5.1 内置函数

  •  dir()           函数返回指定对象的所有属性和方法,不带值
  •  len()          返回对象的长度、元素的个数
  •  float()        返回从数字或字符串生成的浮点数
  •  eval()         用来执行一个字符串表达式,并返回表达式的值
  •  hex()          将整数转换成以“0x”为前缀的小写十六进制字符串
  •  id()             返回对象的标识值,该值在对象的生命周期中唯一且恒定
  •  type(obj)    返回obj的类型
  •  isinstance(object,classinfo)    若参数object是参数classinfo的实例或者其子类,返回True,否则返回False 
  •  issubclass(class, classinfo)       如果classclassinfo的子类,返回True

5.2 常用内置模块

  • time模块  — 时间访问和转换
                    time.time()                                                                            # 获取当前时间戳
                    time.strftime(“%Y-%m-%d %X”,time.localtime())              # 将结构化时间转成format格式的字符串时间
                    time.strptime(“2016:12:26 12:34:33”,“%Y:%m:d%X”)   #将字符串时间转换成结构化时间
  • prandom模块   — 生成伪随机数
                    random.random()                                  # 0,1之间随机浮点数
                    random.randomint(1,3)                         # 随机生成传入参范围内的数字
                    random.choice([1,”23”,[4,5]])             # 随机选择任意一个数字
                    random.sample([1,'23', [4, 5]], 2)          # 随机选择任意两个数字
  • pjson模块—json编码和解码器
                    j = json.dumps(dic)                                         dic = {“name”: ”jack”, ”age”:23}  将python对象编码成字符串
                    s = json.loads(dct_str)                                       dct_tr = ‘{“1”:”abc”}’将已编码的python字符串解码为python对象
  • psys模块—系统相关的参数和函数
                    sys.argv                                                       # 命令行参数list,第一个参数是本身路径
                    sys.version                                                  # 获取python版本信息
                    sys.path                                                      # 返回模块的搜索路径
                    sys.platform                                               # 返回操作系统平台名称
  • pos模块—操作系统接口模块
                    os.name   # 显示当前使用的平台
                    os.getcwd()                       # 显示当前python脚本工作路径
                    os.environ                         # 获取系统环境变量
                    os.path.abspath(path)      # 返回当前绝对路径
                    os.path.dirname(path)      # 返回该路径的父目录
                    os.path.isfile(path)            # 如果path是一个文件,返回True
                    os.path.isdir(path)             # 如果path是一个目录,返回True
                    os.path.join(path, name)   # 连接path和name的连接

Python Console和Terminal:

  • Python Console叫做Python控制台,即Python交互模式;Terminal叫做终端,即命令行模式。
  • Python交互模式主要有两种:CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
  • Python交互式模式可以直接输入代码,然后执行,并立刻得到结果,因此Python交互模式主要是为了调试Python代码用的。
  • 命令行模式与系统的CMD(命令提示符)一样,可以运行各种系统命令。


   

3. python常用模块使用

 
 

1 requests的使用

http原理:https://juejin.im/post/5ac1eb2d6fb9a028de44dd414
http请求报文
          1xx:指示信息--表示请求已接收,继续处理。
          2xx:成功--表示请求已被成功接收、理解、接受。
          3xx:重定向--要完成请求必须进行更进一步的操作。
          4xx:客户端错误--请求有语法错误或请求无法实现。
          5xx:服务器端错误--服务器未能实现合法的请求。
响应头部:set-cookie
http请求行请求
         1.http请求方法   HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE
         2.请求地址示例
         3.协议版本  协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
Form Data
         当发起一次POST请求时,若未指定content-type,则默认content-type为application/x-www-form-urlencoded。即参数会以Form Data的形式进行传递,不会显式出现在请求url中
代码实现
         data声明为字典格式即可
         以下三种post请求方式等效
Request Payload
        JSON类型的POST请求(application/json),参数不会显示出现在请求url中
        代码实现
                 第一种方式:将字典格式的data数据赋给post方法的json参数(会自动将字典格式转为合法的json并添加headers)
                 第二种方式:data声明为字典格式(方便数据添加修改),然后再用json.dumps()方法把data转换为合法的JSON字符串格式,同时需要在headers里声明我们发送的格式
                 第三种方式:data声明为严格的JSON格式字符串,里面必须用双引号等
Query String Parameters
        参数会以url string的形式进行传递,即?后的字符串为其请求参数,并以&作为分隔符
        代码实现
                 将data组织为字典格式,传给get方法的params参数
        获取接口响应数据
        Session保持登录状态

2 数据库操作

常用模块
                 Pymysql       适用mysql 安装pip install pymysql
                 Cx_Oracle    适用oracle 安装pip install cx_oracle   注意:Python版本和位数、cx_Oracle版本和位数、Oracle客户端版本和位数(instant_client)http://wiki.rd.800best.com/pages/viewpage.action?pageId=47504944
                Sqlalchemy  mysql和oracle都适用安装pip install sqlalchemy

3 异常处理

异常处理机制   可以让程序具有良好的容错性,让程序更加健壮
python的所有异常类的基类是BaseException,但是如果要实现自定义异常,应该继承Exception类或其子类
Python常见异常类之间的继承关系
使用try...excepttry...except捕获异常捕获异
           1.当python解释器收到异常对象后,会寻找能处理该异常对象的except块,如果找到合适的except块,则把该异常对象交给except块处理,即捕获异常。如果找不到捕获异常的except块,则运行时环境终止,python解释器退出
           2.异常捕获原则:先处理小异常,再处理大异常
           3.当try块没有异常时会执行else块
           4.不管try块中的代码是否出现异常,甚至再try块或except块中执行了return语句,finally块总会被执行
           5.在异常处理语法结构中,try必需有,except和finally至少出现其一,且finally位于所有的except块之后
自定义异常   异常处理自定义异常自定义异常

4 文件读写

文件读写要考虑的问题:
               1.文件路径
               2.文件读写文件读写要考虑的问题:1.文件路径2.文件类型txt?excel?json?yml?......
               3.涉及的操作打开、读、写(覆写还是追加)
               4.字符编码
文件路径的处理:
               尽量不要写死!!如:E:\projects\xxx.txt
               存在的问题:1.代码在别人电脑上未必是同样路径   2.Linux下与windows下路径分割符不同
txt读写——使用内置函数使用内置函数openop
               1.read() 每次读取整个文件,它通常将读取到底文件内容放到一个字符串变量中,也就是说.read() 生成文件内容是一个字符串类型。
               2.readline()每只读取文件的一行,通常也是读取到的一行内容放到一个字符串变量中,返回str类型。
               3.readlines()每次按行读取整个文件内容,将读取到的内容放到一个列表中,返回list类型。
excel读写
              模块的选择–openpyxl  Python对Excel的处理模块小结
                                  Workbook 处理工作薄
                                  Worksheet 处理工作表
                                 Cell 处理单元格
             考虑因素:
                          1.平台 windows/linux?
                          2.Excel的兼容性xls/xlsx 2003/2007... ?
                          3.文档操作打开/新建/修改/保存?
Openpyxl—常用操作常用操作
pandas

5 日志输出

Logging模块模
              1.日志级别  DEBUG < INFO < WARNING < ERROR < CRITICAL
              2.模块级别的函数记录日志
              3.logging日志模块四大组件      简单点说就是:日志器(logger)是入口,真正干活儿的是处理器(handler),处理器(handler)还可以通过过滤器(filter)和格式器(formatter)对要输出的日志内容做过滤和格式化等处理操作。
             4.配置日志的几种方式
                                           使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数
                                           创建一个日志配置文件,然后使用fileConfig()来读取该文件的内容
                                           创建一个包含配置信息的dict,然后把它传递给dictConfig()函数
https://www.cnblogs.com/yyds/p/6885182.html

 

4.  自动化基础和标准工程介绍

  
 

1 虚拟环境

Python中的虚拟环境
                  Python的包只能同时安装一个版本
                  多个项目有不同的依赖关系,且不同的依赖关系可能会冲突
                 为每个项目设置隔离的虚拟环境,避免互相冲突         
  Virtualenv
                  安装Virtualenv    pip install virtualenv
                  测试安装             virtualenv --version
                  为一个工程创建虚拟环境,在工程目录下:virtualenv venv(虚拟环境名称)
                  激活虚拟环境,进入虚拟环境目录Scripts下:activate                
                  退出虚拟环境:deactivate
                  使用环境   进入环境后,使用pip install安装包
  Python3 venv
                在当前目录创建虚拟环境  python –m venv    
                启用虚拟环境    执行activate.bat文件
                使用虚拟环境           
                退出虚拟环境    执行deactivate.bat文件

2 自动化标准工程

标准工程目录示例        
        Ctrl工程
            要求Python3.6及以上
            安装使用说明   pip install ctrlcreate   创建一个新项目的Ctrl工程 python –m ctrlcreate –t <目标目录> -p <目标工程名>    例如: python –m ctrlcreate –t D:\test –p democtrl
            源文件路径   http://bitbucket.rd.800best.com/projects/AUTECH/repos/ctrlcreate/browse
            Ctrl工程模板

3 公共库



 sdet_common
                   是一个为自动化测试提供的公共库,主要做一些公共类的提供和公共方法的封装
                   前置准备   安装python环境: 下载python并安装,python版本要求:python 3.6及以上    安装公共库包
                                   安装:pip install sdet_common -i http://pypi.800best.cloud/repository/pypi-group/simple --trusted-host pypi.800best.cloud
                                   升级:pip install -U sdet_common -http://pypi.800best.cloud/repository/pypi-group/simple --trusted-host pypi.800best.cloud

主要模块
               HTTP请求模块   包括POST请求、GET请求、文件上传
                                         get请求例子:
                                                         from sdet_common.http.http_util import HttpUtil
                                                         http_util = HttpUtil()
                                                         data = {"id": "22233"}
                                                         head = {"user": "132"}
                                                         http_util.get("http://test.com", data, head, allow_redirects=False)

字符或者字符串处理
                            包括:下划线和驼峰命名转换,随机生成常用号码,如:身份证,手机号等
                            Import路径:from sdet_common.str.str_util import StrUtil
                             主要方法
                                    camel_to_underline:驼峰转下划线
                                    underline_to_camel:下划线转驼峰
                                    get_id_number:身份证号生成
                                    get_phone_number:手机号生成
                                    get_credit_card_number:银行卡号生成
                                    get_uuid:uuid生成
                                    get_barcode:条码生成

数据处理模块
                             包括字典比对(全量比对、包含比对)、列表比对、字典列表比对
                             Import路径:from sdet_common.data.data_util import DataUtil
                             主要方法:
                                     dict_equals_compare:简单字典严格对比,dict1和dict2严格相同
                                     dict_contains_compare:简单字典包含对比,dict1的所有key包含在dict2中,且value相等
                                     list_equals_compare:列表严格对比,list1和list2严格相同
                                     list_equals_compare_ignore_sequence:列表严格对比,list1和list2长度相等,且内容相同,顺序可不同
                                     list_contains_compare:列表包含对比,顺序相同,list1包含在list2中
                                     list_contains_compare_ignore_sequence:列表包含对比,顺序可不同,包含重复字段
                                     dict_list_value_contains_compare_ignore_sequence:字典列表包含对比, list1包含在list2中,且list1中的字典的key包含在list2的字典的key中,且value相等

加密处理模块
                            包括AES加密、RSA加密、MD5加密、SHA256、BASE64加密
                            Import路径:from sdet_common.sdet_common.encrypt.encrypt_util import EncryptUtil
                           主要方法
                                   aes_encrypt:AES加密
                                   aes_decrypt:AES解密
                                   rsa_encrypt:RSA加密
                                   rsa_decrypt:RSA解密
                                   get_rsa_public_key:RSA根据模块和指数得到公钥
                                   md5_decrypt:MD5加密
                                   sha256_encrypt:SHA256加密
                                   base64_encrypt:BASE64加密
                                   base64_decrypt:BASE64解密

   

4 Pytest介绍

Pytest是一个python测试框架
             易读、易写、易运行、失败提示信息清晰
             第三方插件丰富、能够自定义扩展
             和Jenkins集成
             Report框架allure支持pytest
        Pytest的下载和安装
             安装 pip install –U pytest
             验证安装 pytest --version
        Pytest命名规则
             测试文件应当命名为test_<something>.py或者<something>_test.py
             测试函数、测试类方法应当命名为test_<something>
             测试类应当命名为Test<Something>
        Pytest运行
             pytest
             pytest test_<something>.py
             Pytest运行单个测试文件时的控制台输出信息          
        Pytest运行时使用命令行选项
              -k选项允许你使用表达式指定希望运行的测试用例
             -m选项可以用表达式指定多个标记名
             --lf(--last-failed)选项,当一个或多个测试失败时,能够定位到最后一个失败的测试用例重新运行
             -v选项输出详细的测试信息,测试的名字和结果都会显示出来
             --tb=style选项决定捕捉到失败时输出信息的显示方式
        编写测试函数
               断言
              捕获异常
              参数化

异常抛出

     1.用pytest编写测试时若需要传递测试失败信息,则可以直接使用python自带的assert关键字

     2.在测试过程中,经常需要测试是否如期抛出预期的异常,以确定异常处理模块生效。在 pytest 中使用 pytest.raises() 进行异常捕获

     3.由于某种原因,我们只想执行指定的测试函数,使用pytest.mark在函数上进行标记 ,测试时使用-m选择标记的测试函数使用 mark,我们可以给每个函数打上不同的标记,测试时指定 ,就可以允         许所有被标记的函数一个函数可以打多个标记;多个函数也可以打相同的标记

     4.对于尚未开发完成的测试,最好的处理方式就是略过而不执行测试,Pytest使用pytest.mark.skip指定要跳过的测试,pytest 使用 s 表示测试被跳过(SKIPPED)

     5.如果我们事先知道测试函数会执行失败,但又不想直接跳过,而是希望显示的提示
        Pytest使用pytest.mark.xfail实现预见错误功能
        pytest 使用 x 表示预见的失败(XFAIL)。
       如果预见的是失败,但实际运行测试却成功通过,pytest 使用 X 进行标记(XPASS)。

    6.当对一个测试函数进行测试时,通常会给函数传递多组参数。比如测试账号登陆,我们需要模拟各种千奇百怪的账号密码
      使用pytest.mark.parametrize()进行参数化测试,每组参数都独立执行一次测试

5 Fixture

  fixture是一些函数,pytest会在执行测试函数之前(或之后)加载运行它们
            fixture中的代码可以定制
            pytest使用conftest.py文件集中管理fixture
            预处理和后处理
                    fixture的作用是为了抽离出重复的工作和方便复用,为了更精细化控制fixture(比如只想对数据库访问测试脚本使用自动连接关闭的fixture),pytest 使用作用域来进行指定fixture的使用范围 
                    在定义fixture时,通过 scope 参数声明作用域,可选项有:
                    function: 函数级,每个测试函数都会执行一次fixture;
                    class: 类级别,每个测试类执行一次,所有方法都可以使用;
                    module: 模块级,每个模块执行一次,模块内函数和方法都可使用;
                    session: 会话级,一次测试只执行一次,所有被找到的函数和方法都可用
                    最简单使用fixture方式是作为测试函数参数
                    执行结果可以清楚看到各fixture的作用域和执行顺序
            重命名

6 常用插件

 pytest-xdist:并行运行测试用例
            pytest-rerunfailures:重新运行失败的测试用例
            pytest-html:生成HTML格式报告
            allure-pytest:生成allure测试报告
            pytest-pep8和pytest-pycodestyle:python代码风格检

7 项目自动化

 

 

posted @ 2021-11-01 17:28  小丸子姐姐  阅读(318)  评论(0编辑  收藏  举报