此文记录一些python语法不同之处.. 适合有研发基础的童鞋查阅.. 零基础的童鞋就怪怪一个个学吧! 记录也不一定全,随笔一记 多行语句 total=item1+\ item2+\ item3 "\"记得写上哟 注释 # 单行注释 '''  很多行...  ''' 输入语法 raw_input("你想说的话\n") input("据说py3后的只支持这个了") 不换行输出 print a,b          在print时用,链接两个参数 没…
在开始学习前,先唠几句: 身为一个开发人员,为何想要转测试..很多人不解. 但我觉得这并没有什么不可,测试人员是质量的把控者: 要出一个让客户满意的产品,单纯靠开发自测,是不够的..相信其中缘由大家都明了... 所以测试是产品最终把控品质的人员:如果还只能点点点..那除了浪费人力物力,还能有什么进步? 所以从事web开发的我,在相关工作中接触到自动化测试,觉得还是个挺重要的岗位. 解放双手,专注更多精力在完善测试用例的设计,能更好的做好把关的工作为首. 话不多说,下面进入正题吧! 1.搭环境 (…
python笔记 函数式编程 函数 函数是Python内建支持一种封装(将大段代码拆成函数) 通过函数的调用,可以将复制的任务分解. 函数式编程(Functional Programming) 计算机(Computer)和计算(Compute) 抽象程度 程序语言 距离硬件 越高 越高级 越远 越低 越低级 越近 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程编写的函数是没有变量的. 是否允许使用变量的编程 没有变量 | 使用变量 ---|--- 没有变量状态|内部变量状态不确定 没…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: search in mail box """ import unittest import os import sys from selenium import webdriver from selenium.webdriver.common.keys import Keys cur_dir = os.getcwd() sys.pat…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ 我们多添加一些测试场景,比如:删除邮件,查找邮件,发送邮件等等 """ import unittest import os import sys from selenium import webdriver cur_dir = os.getcwd() sys.path.append(cur_dir.split(r'\test_case')[0])…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: delete mail 我们多添加一些测试场景,比如:删除邮件,查找邮件,发送邮件等等 """ import unittest import os import sys from selenium import webdriver cur_dir = os.getcwd() sys.path.append(cur_dir.split(…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 定制浏览器 """ import unittest import os import time from selenium import webdriver class TestConfigFirefox(unittest.TestCase): def setUp(self): fp = webdriver.FirefoxProfil…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 测试126邮箱的登陆功能 1.使用公共方法public.login 2.将测试数据放在xml文件中,使用数据驱动(/test_data/login.xml) 3.这里使用xml.dom.minidom读取xml数据 """ import unittest import xml.dom.minidom import os import…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 将登陆动作封装成function """ import unittest import sys import os from selenium import webdriver from selenium.webdriver.common.keys import Keys # 单独运行这个py文件时,需要加入下面的代码,用以将项目的目…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 登陆126邮箱 """ from selenium import webdriver import unittest class TestLogin(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 使用unittest组织用例 """ from selenium import webdriver import unittest import time class TestSearch(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() se…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc:学习unittest的用法 注意setUp/setUpClass,tearDown/tearDownClass的区别 ① setUp():每个测试函数运行前运行 ② tearDown():每个测试函数运行完后执行 ③ setUpClass():必须使用@classmethod 装饰器,所有test运行前运行一次 ④ tearDownClass():必须使用@clas…
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 操作浏览器 """ from selenium import webdriver import time import logging logging.basicConfig(level=logging.INFO) baidu = "http://www.baidu.com" dr = webdriver.Fire…
#!/usr/bin/env python # -*- coding: utf-8 -*- """@desc: 讲讲web项目中常用的方法属性 webdriver 提供了八种元素定位方法: id.name.class name.tag name.link text.partial link text.xpath.css selector 在 Python 语言中对应的定位方法如下: find_element_by_id() find_element_by_name() fin…
一.数据类型 python可以直接处理的数据类型有:整数.浮点数.字符串.布尔值.空值. 整数 浮点数 字符串:双引号内嵌套单引号,可以输出 i'm ok. 也可以用\来实现,\n 换行 \t table 多行字符串用  ''' ''' 布尔值: 可以对布尔值进行与或非运算/ 与and 或or 非not 空值 二.变量 a = 1/ a = "nadech"    与java不同,python在声明一个变量的时候不用指定变量的类型,直接赋值就可以了 在 执行a =1 的时候,pytho…
1,函数的参数 1.1,查看函数的参数类型 def run(a, *args, b, **kwargs): return a + b 可以通过如下方式查看参数类型: import inspect k = inspect.signature(run) for i, j in k.parameters.items(): print('{:7}:'.format(i) , j.kind) 输出结果为: a : POSITIONAL_OR_KEYWORD args : VAR_POSITIONAL b…
一 运算符 1算术运算+ - * /  % ** //其中%为取余,**为取幂如2**10=1024    9//4=2 需要注意的是python2.7中如9/2=4 需要正确表示,则在开头添加 from __future__ import division 而python3中不需要9/2=4.5 2比较运算符 ==  !=  <>   >  <  >=  <= 3赋值运算=  +=  -=  *=  /=  %=    **=   //= 如a*=c  等同a=a*c…
python2.x使用MySQLdb python3.x使用pymysql代替MySQLdb 不过我使用的是python3.5,MySQLdb还是可以在python3.5使用的. #!/usr/bin/env python # _*_ coding:utf-8 _*_ import pymysql import MySQLdb # 打开数据库连接 db = pymysql.connect("10.35.22.91", "root", "adminadmin…
一.查找数列重复元素---count() >>> list = [,,,,,,,,,,,] >>> set = set(list) >>> for item in set: print("the %d has found %d" %(item,list.count(item))) #输出 #the has found #the has found #the has found #the has found 二.查找重复元素,使用 C…
17.进程线程 进程间通信方式:管道Pipe:队列Queue:共享内存Value.Array.Manager: 多进程同步:锁Lock.递归锁RLock.Condition(条件变量):事件event:信号signal:信号量Semaphore: 函数方式 from multiprocessing import Process import time import os def test(sub_p): for j in range(20): print('%s----pid=%s' % (su…
模块 在Python中,一个.py文件就是一个模块 if __name__ == '__main__':所有模块都有一个 __name__ 属性,__name__ 的值取决于如何应用模块 run当前文件时,__name__ 属性的值是 '__main__',此函数被执行: *可用于调试当前文件中的函数 当前文件被其他模块调用时,__name__ 属性的值是该模块的名字,此函数不会被执行: *可以直接被第三方调用 也是因为此,要注意模块被调用时会加载模块,导致这个模块被“执行”,所以要将功能代码块…
属性的魔法方法 __getattribute__(self,name):当该类的属性被访问时,自动触发,是最先被触发的属性方法 __setattr__(self,name,value):当一个属性被设置时,自动触发 __delattr__(self,name):当一个属性被删除时,自动触发 >>>class C: def __getattribute__(self,name): print('getattribute') def __getattr__(self,name): print…
算数运算方法 .反运算方法 以对象A+对象B为例,都是将A作为self值,而B作为other值传入__add__(self,other)方法: 当用户输入A+B,就会调用重写的add方法: >>>class Nint(int): def __add__(self,other): return int.__sub__(self,other) def __sub__(self,other): return int.__add__(self,other) >>>A = Nin…
__init__(self[,...]) __init__和__new__组成python的构造器,但__init__更多的是负责初始化操作,相当于一个项目中的配置文件,__new__才是真正的构造函数,创建并返回一个实例对象,如果__new__只调用了一次,就会得到一个对象 __new__(cls[,...]) 当继承一个不可修改的类,但又想去修改的时候,需要重写__new__方法 >>>class Capstr(str): #str是一个不可修改的类 def __new__(cls,…
多态 对于函数中的变量,我们只需要知道它这个变量是什么类,无需确切地知道它的子类型,就可以放心地调用类的方法,而具体调用的这个方法是作用在父类对象还是子类对象上,由运行时该对象的确切类型决定,这就是多态真正的威力 >>>class Animal: #定义一个父类 def run(self): print('animal is running...') >>>class Dog(Animal): #继承于Animal类 def run(self): print('Dog…
定位的原则就是:id name class 优先,强烈建议和前端哥哥搞好关系.定位就不是问题:实在不行就xpath和css大部分偶可以定位到. webdriver定位的方法是通过一个By类,By类中有许多的属性,常用的有已下几个: NO1. ID:dom元素首选的定位方式,id是唯一,定位速度快.(和fe处好关系,用id定位杠杠的) 如By.id(“kw”) 就可以定位到百度的搜索框 NO2. Name:表单定位为name首选,因为表单肯定会有一个name的属性. 如上图中的百度搜索框,也可以用…
1.切片:常用于取list或tuple的部分元素的操作 1)l=[1,2,3,4,5,6] l[:3]表示取前3个值,l[1:5]表示1到5个值, L[-3:]从列表最后往前数即最后3个数.... 2)t=(1,2,3,4,5,6) t(:3),t(:),t(1:5)... 2.迭代 1)for ch in 'ABC' 2)for i, value in enumerate(['A', 'B', 'C']) 3)for x, y in [(1, 1), (2, 4), (3, 9)] 3.列表生…
tolist()方法: 列表可通过array()转换为数组或mat()转为矩阵 而tolist()可把数组对象或矩阵对象转为列表 数组对象: array([[1, 2, 3], [1, 2, 3]]) 矩阵对象: matrix([[1, 2, 3], [1, 2, 3]]) 列表: [[1, 2, 3],[1, 2, 3]] astype("数据类型") 强制转换数据类型 数据类型 = float,int,str,  bool等 __new()__与__init()__的差别: __n…
迭代器用于遍历容器中的数据,但它不是容器,它是一个实现了__next__方法的对象 与迭代器相关的内置函数: iter(): 将一个对象转换成一个迭代器 next(): 访问迭代器中的下一个变量,直到无可用变量,则抛出StopIteration异常 >>>string = 'demi' >>>name = iter(string) >>>next(name) 'd' >>>next(name) 'e' >>>for…
定制容器 容器类型的协议: 定制不可变容器,只需要定义__len__()和__getitem__()方法 定制可变容器,需要定义__len__().__getitem__().__setitem__()和_delitem__()方法 __len__(self): 定义当被len()调用时的行为,返回容器中的个数 __getitem__(self,key): 定义获取容器中指定元素的行为,相当于self[key] __setitem__(self,key,value): 定义设置容器中指定元素的行…