Python或自动化测试相关

1、mock跟stub测试桩,mock用于测试结果,stub用于提供测试条件

(1)A调用B,E等,要测试方法A,此时方法E还没完成,用stub 模拟方法E的返回值,提供A测试

 

(2)mock方法:A调用B,使用场景为:A调用B后的测试效果

 

 2、super():调用父类的方法

3、自动化测试中的PO模式:page-object,是指将测试页面当做一个类(对测试脚本的系统封装)

一个页面是一个类,元素在页面中,所以每个元素的定位信息是这个类中的一个变量;这个页面的常规业务操作是这个类中的一个个成员方法。比如登录页面可以抽象为一个login类,其中username、password两个类变量存储的是用户名和密码元素的定位信息;登录页面有完成登录login这个方法,可以直接调用。当我们需要完成完成登录的时候,实例化该类调用的方法即可(下图是PO模式下自动化测试代码)
优势:
(1)提供业务流程与页面元素操作分离的模式
(2)页面对象与用例分离,使我们更好的复用对象
(3)可服用的页面方法代码会更加优化
(4)更有效的命名方式使我们更清晰了解方法对应的页面

 4、JSON跟字典dict 的区别:

(1)python中的数据类型有int ,str,float、list、bool、tuple、dict、set,所以dict是一种数据类型

(2)json是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来表示数据,不同编程语言之间的数据交换采用json传输

(3)json的本质还是字符串,只是采用 key : value的形式来表示的字符串

 (4)json的限制:①字符串外边有单引号② json是类字典的形式,里面的键-值对规定必须使用双引号,值如果是数字可以不加双引号;字典无限制

1 import json
2 a = {"a":1,"b":1,"c":True}      #a是字典
3 b = '{"a": 1,"b":2,"c":true}'   #b是json
4 print(type(a))
5 <class 'dict'>
6 print(type(b))
7 <class 'str'>
8 print(json.dumps(a))  # 将字典a 转换为json
9 {"a": 1, "b": 1, "c": true}

 5、session、cookie、token的区别:

    • Cookie是由服务端生成,存储在响应头中,返回给客户端,客户端会将cookie存储下来

       

    • Session是由服务端生成,存储在服务器端的内存、缓存、数据库等地方

       

    • 在客户端发送请求时,user-agent会自动获取本地存储的cookie,将cookie信息存储在请求头中,发送给服务端

       

    • 请求都是由客户端发起的,当服务端生成了session,客户端怎么会知道呢?客户端怎么能对上这个session暗号?


      1)、在客户端给服务端发送请求后,服务端会根据请求信息生成session,同时生成一个session_id,通过cookie返回给客户端;


      2)、客户端再次向服务端发送请求时,会通过cookie将这个session_id发送给服务端,这样就对上了session的暗号。

       

    • cookie可以作为管理session的一种方式,当cookie被禁用时,可以通过表单或重写url传送session_id

访问流程:

    • 首先,客户端会发送一个http请求到服务器端。
    • 服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了sessionId。Set-Cookie格式如下,具体请看Cookie详解
      Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
    • 在客户端发起的第二次请求,假如服务器给了set-Cookie,浏览器会自动在请求头中添加cookie
    • 服务器接收请求,分解cookie,验证信息,核对成功后返回response给客户端

(3)token也类似一个令牌,无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。

访问流程:

  • 用户登录,成功后服务器返回Token给客户端。
  • 客户端收到数据后保存在客户端
  • 客户端再次访问服务器,将token放入headers中
  • 服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码

6、依赖于登录的接口:

(1)cookie参数可以用session 自动关联(会话对象session比cookies更方便管理请求的cookie信息)

 s = request.session()

 后面请求用s.get()和s.post()就可以自动关联cookie

s = requests.session()
def get_it_execution(): result = {} loginurl = "https://account.chsi.com.cn/passport/login" h1 = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36", } s.headers.update(h1) r = s.get(loginurl, verify=False) dom = etree.HTML(r.content.decode("utf-8")) try: result["lt"] = dom.xpath('//input[@name="lt"]')[0].get("value") result["execution"] = dom.xpath('//input[@name="execution"]')[0].get("value") print(result) except: print("lt、execution参数获取失败!") return result

 (2)登录接口依赖token的, 编写login函数获取token值后返回,需要用到token的函数,先调用login 函数获取

import requests
def login():
    url = ".............."
    data ={
        "username":'use22',
        "psw": '999'
    }
    h={
        "user-agent":'ssssssssssssssss'
    }

    re = requests.post(url=url,data=data,headers = h)
    token = re.json()['data']['token']
    return token

def get():
    url = '22222222222'
    h1 = {
        'user-agent': '22222',
        'token': login()
    }
    re = requests.post(url=url,headers = h1)
    

7、代码耦合:一个软件结构内不同模块间互连程度的度量

8、把用类创建出对象的过程称为实例化

9、python中函数跟方法的区别:

(1)函数是写在文件中,方法是写在class中

(2)函数可以带参数,也可以不带参数;方法需要带上self参数(静态方法除外)

(3)方法的调用需要用  对象.方法  调用

10、实例方法、类方法、静态方法区别:

(1)实例方法:定义在类内的普通方法,传入self参数

既可以访问类变量,又可以访问实例变量

(2)类方法:@classmethod

类方法需要使用@classmethod装饰器定义
类方法至少有一个形参,第一个形参用于绑定类,约定写为
'cls' 类和该类的实例都可以调用类方法 类方法不能访问此类创建的实例的属性

(3)静态方法:@staticmethod

 静态方法需要使用 @staticmethod装饰器定义
 静态方法与普通函数定义相同,不需要传入self实例参数和cls参数
 静态方法只能凭借该类或类创建的实例调用
 静态方法不能访问实例变量(属性)
class Function(object):
    # 在类定义中定义变量
    cls_variable = "class varibale"

    def __init__(self):
        # 在构造函数中创建变量
        self.__instance_variable = "instance variable"

    def instance_method(self):
        print(self.cls_variable)
        print(self.__instance_variable)
        print("this is a instance method")

    @staticmethod
    def static_method():
        print(Function.cls_variable)
        # print(Function.__instance_variable)    此处会报错,无法访问实例变量
        print("this is a static method")

    @classmethod
    def class_method(cls):
        print(cls.cls_variable)
        # print(cls.__instance_variable)   此处会报错,无法访问实例变量
        print("this is a class method")

    @classmethod
    def set_class_variable(cls):
        cls.cls_variable = 'new class variable'

    def set_instace_varibale(self):
        self.__instance_variable = 'new instance varibale'

#  类实例可以调用类方法和静态方法
function1 = Function()
function1.set_class_variable()
function1.class_method()
function1.instance_method()
function1.static_method()

function2 = Function()
function2.set_instace_varibale()
function2.class_method()
function2.instance_method()
function2.static_method()

 

 

 

 

posted on 2020-03-09 21:37  ChanXM  阅读(263)  评论(0)    收藏  举报

导航