测试开发知识点(五)

传送门 测试开发知识点(一)
测试开发知识点(二)
测试开发知识点(三)
测试开发知识点(四)
测试开发知识点(五)
Linux系统 Linux学习资料 243、 Linux入门教程
https://www.w3cschool.cn/linux/
244、 Linux命令大全
https://www.w3cschool.cn/linux/linux-command-manual.html
常用的Linux命令 245、 查看当前的路径是啥?

pwd

246、 查看当前路径下面的所有文件详细列表?
ls -l

247、 创建downloads目录
mkdir downloads

248、 进入到downloads目录(掌握)
cd downloads

249、 回到父目录
cd ..

250、 回到父目录的父目录
cd ../..

251、 查找(搜索)文件(掌握)
在当前路径(使用点号表示)下查找文件名包含test的所有文件?
252、 切换到根目录(顶层目录)下面?
cd /

253、 在根目录(/)下面查找出文件名为hosts的所有文件
254、 移动目录或文件(掌握)
将test0106这个目录移动到/home/scott/Desktop
255、 重命名目录或文件(掌握)
将test0106这个目录重命名为test20180106
256、 复制文件(掌握)
将/etc/hosts文件复制到/home/scott/Desktop里面
257、 删除目录或文件(掌握)
将/home/scott/Desktop里面的hosts备份文件删除
# rm命令 rm -f 文件名 rm -rf 目录名

258、 查看磁盘空间
df -h

259、 查看服务器的性能情况(cpu,内存占用情况以及磁盘读写)
top # 退出查看使用q

260、 tar命令
# 把scott账号的主目录打包 cd /home/ tar -czvf scott.tar.gz scott # 解压(解包) tar -xzvf jdk-8u181-linux-i586.tar.gz

261、 检查tomcat有没有被启动(掌握)
ps -ef | grep tomcat # 该指令可以查看到tomcat进程的编号(pid)

262、 把这个tomcat进程停掉
kill -9 {tomcat进程的编号}

263、 查看8080端口号没有有被占用(掌握)
netstat -an | grep 8080

264、 查看tomcat的启动有没有完成?
# 使用tail命令查看实时日志 cd /opt/tomcat8/logs tail -f catalina.out

265、 查看命令的使用方法
比如:
man find

266、 设置文件权限(掌握)
chmod

267、 查看系统版本
uname -a

268、 检查网络连接是否正常(掌握)
ping -c {次数} {目标服务器ip地址}

269、 查看端口的占用情况(掌握)
netstat -an

270、 查看所有的进程(掌握)
ps -ef

271、 杀进程
kill -9 {进程号}

272、 查看IP地址(掌握)
ifconfig # 类似windows命令行窗口里面的ipconfig

273、 tomcat的启动和关闭
cd /opt/tomcat8/bin ./startup.sh ./shutdown.sh

【参考】Linux下配置Tomcat为系统服务并开机自启动
https://www.linuxidc.com/Linux/2018-08/153705.htm
【参考】tomcat在linux下自启动
http://www.cnblogs.com/dragonsuc/p/6094468.html
274、 使用more命令查看日志文件
# 不要用vi打开,可能导致后台写日志失败 # more 用来查看比较大的文件(支持分屏查看,f:往后翻,b:往回翻,q:退出) cd /opt/tomcat8/logs more catalina.out # cat一般用来查看小文件(内容比较少),more命令可以用来查看大文件

275、 用来查看当前路径下的所有文件(包括隐藏文件)(掌握)
ls -al

276、 创建一个空文件
比如:
touch test.sh

277、 过滤
grep

278、 查看磁盘列表
fdisk -l

279、查看磁盘空间
df-h

280、查看文件(夹)大小
du -sh {文件(夹)名}

281、设置环境变量
export JAVA_HOME=/opt/jdk8 export PATH=$JAVA_HOME/bin:$PATH

282、 环境变量生效
source /etc/profile

283、查看环境变量
echo$PATH

284、 vi编辑器里面的常用命令
命令模式:
序号 输入 作用
1 :w 保存不退出
2 :w! 强制保存不退出
3 :wq! 强制保存并退出
4 :wq 保存并退出
5 :q! 退出不保存
6 dd 删除光标所在的行
7 i 进入编辑模式(在当前位置插入字符)
8 Shift + i 进入编辑模式(在当前行的开始插入字符)
9 o 进入编辑模式(在当前行的下方插入内容)
10 Shift + o 进入编辑模式(在当前行的上方插入内容)
11 :set nu 显示行号
12 :set nonu 不显示行号
13 x 删除光标位置的字符(还是在命令模式)
14 Shift+r 目的:替换光标位置的字符序列(会进入到编辑模式)
15 r 目的:替换光标位置的单个字符(还是在命令模式)
16 :set ic 设置不区分大小写
17 :set noic 设置区分大小写
18 /keyword 搜索关键字(回车,查找下一个按n,查找上一个按N)
19 Shift + g 将光标移动到最后一行
20 gg 将光标移动到第一行
21 $ 将光标移动到行末
22 0 将光标移动到行首
编辑模式:
序号 输入 作用
1 Esc 回到命令模式
285、 以系统管理者的身份执行指令
sudo {指令}

【参考】xxx 不在 sudoers 文件中。此事将被报告
https://www.cnblogs.com/liuming1992/p/4882595.html
286、 切换账号
su - {账号}

Linux服务器性能监控 287、 监控Linux服务器的性能
【参考】nmon的安装及使用
https://www.cnblogs.com/mululu/p/6398483.html
【参考】一篇文章学会使用 nmon
https://www.sohu.com/a/219012698_151779
虚拟机软件VMware 288、 给虚拟机安装Linux系统
【参考】“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题
https://www.cnblogs.com/tangbomao/p/6649051.html
【参考】vmware虚拟机NAT配置静态IP教程详解
https://m.jb51.net/article/99265.htm
其他 289、 Linux干货分享
【参考】Linux常用命令
https://mp.weixin.qq.com/s?__biz=MjM5MDg2NDk2Mw==&mid=2654485268&idx=3&sn=f7ebb026b48f1b237efce00dafe0b32a
Python自动化 295、 Python基础
入门教程:
http://www.runoob.com/python/python-tutorial.html
296、代码编辑器
1)设置python解释器的安装路径
D:\Python27\python.exe

2)设置编码为utf8(使用utf8编码存储py文件)
【参考】Python 中文编码
https://www.runoob.com/python/python-chinese-encoding.html
297、 基础语法
1)Python的代码语句不需要使用分号结束
2)命名的时候可以使用字母、数字和下划线,不能使用特殊字符(比如空格),也不能使用python关键字
3)命名函数的时候使用小写字母,单词和单词之间使用下划线隔开
4)缩进:单元(比如函数,循环,分支结构,python类)里面的代码语句要使用缩进(4个空格)
5)删除缩进:写好一个单元(比如函数,循环,分支结构,python类)后,按回车键,新的代码行会自动缩进,需要删除缩进
6)空行(没有缩进):函数之间使用1个空行隔开;Python脚本的最后要添加1个空行;函数定义开始和结束的地方空两行,Python类定义开始和结束的地方空两行
7)空格:运算符两边要有空格;写单行注释的时候,#后面要跟1个空格
8)逗号:分隔符,后面要有空格
9)单引号(表示单行文本)
10)双引号(表示单行文本)
11)三引号的作用(多行文本和多行注释)
12)单行注释(使用#开头)
13)多行注释(使用三引号开头,三引号结束)
14)反斜杠:表示转义;将1行代码拆成多行的时候需要使用反斜杠
15)[]表示数组的开始和结束
16)()表示元组的开始和结束
17){}表示字典的开始和结束
【参考】代码命名大小写规范(Java,Python)
https://blog.csdn.net/quiet_girl/article/details/73896791
298、编码问题
【参考】Python 字符串前面加u,r,b的含义
https://www.cnblogs.com/liangmingshen/p/9274021.html
【参考】Python中文乱码
https://www.jianshu.com/p/220ee0f219c6
【参考】UnicodeDecodeError: 'ascii' codec can't decode解决
http://www.cnblogs.com/angellst/p/8783190.html
299、 标准数据类型
number(数字),str(字符串),list(列表),tuple(元组),dictionary(字典)
提问:元组和列表的区别
300、布尔值和空值
直接量 含义
True 真,比如:a = True
False 假,比如:a = False
None 空,比如:a = None
301、转义字符
转义字符 含义
\n 换行
\r 换行(回车),适用Linux系统
\t 横向制表符
301、 变量(变量的定义和作用域)
注意:Python里面定义变量不需要声明变量的类型
# 定义一个整数 a = 1 # 定义一个小数 b = 3.142 a = b print(a) # 定义一个文本 s = u'测试虾' # 定义一个列表 arr = [1, 2, 3] # 定义一个元组 x = (1, 2, 3) # 定义一个字典,表示刘亦菲 lyf = {'empno': 1001, 'ename': u'刘亦菲', 'male': False}

302、__name__变量
【参考】python中__name__的使用
https://www.cnblogs.com/1204guo/p/7966461.html
【参考】浅析python中__name__ = '__main__' 的作用
https://www.cnblogs.com/alan-babyblog/p/5147770.html
303、运算符
赋值运算符,算术运算符,逻辑运算符,比较运算符,位运算符
运算符 作用
+ 加运算;连接文本;合并数组(元组)
% 取余;连接元组里面的每个元素
and 并且,逻辑与
or 或者,逻辑或
not 逻辑非
is 比较两个对象的地址是否相同
in 源字符串是否包含指定的文本,列表里面是否包含指定的对象
304、字符串连接
1)使用逗号(会产生空格)
2)使用加号
注意:使用加号连接整数和文本的话,会发生错误
3)直接拼接(字面量)
4)使用%(连接1个或多个文本),支持不同类型的数据
5)使用format函数(连接1个或多个文本),支持连接不同类型的数据
6)使用join函数(数组或元组)
# -*- coding: UTF-8 -*- a = 'hello' b = 'python' # 使用加号连接 c = a + b # 使用逗号连接 print a, b # 直接拼接字符串常量 # print('abc''world') print('hello%x%X' % (90, 90)) c = 'hello{0}{1}'.format(a, b) print(c) a = ('abc', 'hello', '3') b = ('python', 'test') c = a + b print(''.join(c))

【参考】python字符串
https://www.runoob.com/python/python-strings.html
【参考】python字符串拼接
https://www.cnblogs.com/yexuesong/p/9232349.html
305、 函数
函数的定义和调用
306、获取键盘输入的数据
Python函数 说明
raw_input 适用python2
input函数 适用python3
# -*- coding: UTF-8 -*-x = raw_input('请输入x:') y = raw_input('请输入y:') print('{0}+{1}={2}'.format(x, y, int(x) + int(y)))

307、数据类型转换函数
Python函数 作用
int(value) 将整数格式的文本(字符串)转成整数
str(value) 将整数转成文本(字符串)
308、 数组(增、删、改、查)
arr = list([1, 5, 3]) arr.append(2) arr.append('hello') print(arr) arr.remove(3) print(arr) # arr.sort() # arr.reverse() # print(arr) #打印数组的大小 print(len(arr))

309、数组操作(合并,倒序,排序,遍历,求和,求最大值,求最小值)
# 遍历 for i in arr: print(i)

python函数 作用
sum(arr) 求和
max(arr) 求最大值
min(arr) 求最小值
sort(arr) 排序(从小到大)
len(arr) 计算数组的大小
310、字典(遍历,添加键值对,修改键的值,获取键的值,删除键值对)
# 遍历字典(获取所有的键和值) for key in dict: print('%s:%s' % (key, dict[key]))

311、日历,日期和时间
【参考】Python 日期和时间
https://www.runoob.com/python/python-date-time.html
【参考】python中time模块的源码在哪里丫??
https://segmentfault.com/q/1010000012132002/a-1020000012133135
312、 分支结构
使用python计算个人所得税:
//未完成

313、 循环结构(循环嵌套)
s = 0 # for i in range(0, 100, 2): for i in range(1, 101): s += i print(s) x = list(range(5, 10)) print(x)

【参考】python2和python3中的range区别
https://www.cnblogs.com/liuchunxiao83/p/6403709.html
使用python打印乘法口诀表:
//未完成

314、循环控制(break, continue)
315、文件读取
【参考】open函数
http://www.runoob.com/python/python-func-open.html
【参考】python读取文件时提示UnicodeDecodeError: 'gbk' codec can't decode
https://www.cnblogs.com/wx2017/p/9035765.html
316、 类和对象
定义一个Python父类:
# -*- coding: UTF-8 -*-from time import timeclass Employee: """ 员工类 """ def __init__(self,empno,ename,hiredate,age=25, male=False, **kw): """ 构造方法 :param empno: 工号 :param ename: 姓名 :param hiredate: 入职时间 :param age: 年龄 :param male: 性别 :param kw: 其他属性 """ self.empno = empno self.ename = ename self.age = age self.male = male self.hiredate = hiredate self.kw = kwdef show(self): print('%d,%s,%d,%s,%s,%s' % (self.empno, self.ename, self.age, self.male, self.hiredate, self.kw))if __name__ == '__main__': zs = Employee(1001, 'zhangsan', 23, True, time()) zs.age = 26 zs.show()

定义一个Python子类:
from employee import Employee from time import timeclass PM(Employee): def __init__(self, empno, ename, hiredate, exp, bonus, age=23, male=False, **kw): Employee.__init__(self, empno, ename, hiredate, age, male) self.exp = exp self.bonus = bonus self.kw = kwdef show(self): print('%d,%s,%d,%s,%s,%f,%f,%s' % (self.empno, self.ename, self.age, self.male, self.hiredate, self.exp, self.bonus, self.kw))if __name__ == '__main__': wangwu = PM(1003, 'wangwu', time(), 3.0, 5000.0) wangwu.show()

317、Python参数
1)固定参数(必填参数,不能为空)
2)默认值参数(可以不填)
3)可变参数(可以接收多个参数,比如:*args)
4)关键字参数(可以接收多个键值对,比如:**kw)
def add(*args): s = 0 for i in args: s += i return sif __name__ == '__main__': print(add(1, 2, 3, 4, 5))

【参考】Python传入参数的几种方法
https://blog.csdn.net/abc_12366/article/details/79627263
318、模块(python文件或包)
导入模块的语法格式:
1)import 模块名
import employee

2)from 模块名 import 函数名
from time import time

3)from 模块名 import 类名
from employee import Employee

4)from 模块名 import *
from employee import *

5)from 包名 import 模块名
from day02 import employee

6)from 包名 import *
from day02 import *

319、pymssql框架
【参考】python连接sqlserver数据库
https://www.cnblogs.com/toheart/p/9802990.html
320、pymysql框架(增、删、改、查)
# -*- coding: UTF-8 -*- import pymysql# 连接数据库 conn = pymysql.connect('192.168.1.124', 'root', '123456', 'weather', charset='utf8', port=3306) # 获取游标 cursor = conn.cursor() sql2 = "insert into emp values(1003,'测试虾','男','2019-08-26')" cursor.execute(sql2) conn.commit() sql = 'select * from emp' # 执行查询操作 cursor.execute(sql) # 获取查询结果 rows = cursor.fetchall() for row in rows: print('%d,%s,%s,%s' % (row[0], row[1], row[2], row[3]))# 关闭数据库连接 conn.close()

321、异常处理
【参考】python3连接mysql数据库及异常信息处理
https://blog.csdn.net/lovelong8808/article/details/77193752
322、 requests框架
1)安装requests框架
测试开发知识点(五)
文章图片
image.png 2)使用requests框架发送http请求
# -*- coding: UTF-8 -*-import requestsresp = requests.get('https://www.51job.com') # 打印响应头 # print(resp.headers) # 获取响应头 headers = resp.headers # 遍历响应头(字典) for key in headers: print('%s:%s' % (key, headers[key])) # 打印响应数据 # print(resp.content.decode('gbk'))

参考:
https://www.cnblogs.com/ranxf/p/7808537.html
https://www.cnblogs.com/lilinwei340/p/6417689.html
323、json框架
函数 作用
dumps(obj) 将对象或数组转成json格式的字符串
loads(text) 将json格式的字符串转成对象或数组
# -*- coding: UTF-8 -*-import json import requestsresp = requests.get('http://v.juhe.cn/weather/index?' 'format=2&cityname=%E4%B8%8A%E6%B5%B7&' 'key=f3068259596b5302176417cea94e0b65') # 将json格式的字符串解析成字典 weather = json.loads(resp.content) # 获取result属性的内容 result = weather['result'] # 获取today属性的内容 today = result['today'] # 获取temperature属性的内容 print(u'今天的温度:%s' % today['temperature']) # 获取future属性的内容 future = result['future'] # 获取明天的数据 tomorrow = future[1] # 获取明天的temperature print(u'明天的温度:%s' % tomorrow['temperature'])

324、 unittest框架
unittest 官方文档
https://docs.python.org/3.7/library/unittest.html
1)验证的方法
import unittestclass FirstTest(unittest.TestCase):def test_f(self): x = 'abc' y = 'helloabc' z = None # self.assertIs(x, y) self.assertIsNone(z) self.assertIn(1, [1, 2, 3]) self.assertTrue(1 in [1, 2, 3]) self.assertTrue(x in y) self.assertIsInstance((1, 2, 3), tuple) self.assertAlmostEqual(10/3.0, 3.3333333)if __name__ == '__main__': unittest.main(verbosity=2)

【参考】Python必会的单元测试框架 —— unittest
https://www.jianshu.com/p/38948d0d73f5
【参考】python_unittest详解
https://www.jianshu.com/p/8e22c1213260
2)运行python测试用例
import unittestclass SecondTest(unittest.TestCase):def test_upper(self): self.assertEqual('foo'.upper(), 'FOO')def test_isupper(self): self.assertTrue('FOO'.isupper()) self.assertFalse('Foo'.isupper())def test_split(self): s = 'hello world' self.assertEqual(s.split(), ['hello', 'world'])def test_exception(self): with self.assertRaises(ZeroDivisionError): print(1/0)if __name__ == '__main__': unittest.main(verbosity=2)

3)运行python测试集
if __name__ == '__main__': # 构造测试套件 suite = unittest.TestSuite() suite.addTest(FirstTest('test_f')) suite.addTest(SecondTest('test_upper')) # 执行测试 runner = unittest.TextTestRunner(verbosity=2) runner.run(suite)

【参考】测试套件(TestSuite)
https://www.cnblogs.com/eastonliu/p/9145255.html
4)unittest注解
@classmethod, @parameterized
5)参数化测试
import unittest from parameterized import parameterizedclass SumTest(unittest.TestCase): @parameterized.expand([ (6, [1, 2, 3]), (0, []), (6.142, [1, 2, 3.142]), (2, [1, False, True]) ]) def test_sum(self, expected, arr): self.assertAlmostEqual(sum(arr), expected)@parameterized.expand([ (1, 2, 'abc'), (1, 2, None) ]) def test_exception(self, *arr): with self.assertRaises(TypeError): sum(arr)if __name__ == '__main__': unittest.main(verbosity=2)

325、 selenium框架
1)安装selenium框架
测试开发知识点(五)
文章图片
image.png 安装路径如下:
D:\Python27\Lib\site-packages\selenium

2)安装火狐浏览器的驱动
安装路径如下:
C:\Windows\System32\geckodriver.exe

3)使用selenium操作浏览器
# -*- coding: UTF-8 -*- from selenium.webdriver import * from time import *# 创建一个驱动 driver = Firefox() # 最大化窗口 driver.maximize_window() # 设置最大等待时间 driver.implicitly_wait(10) # 打开搜狗的网页 driver.get('https://www.sogou.com') # 点击搜索框 driver.find_element_by_id('query').click() # 输入关键字 driver.find_element_by_id('query').send_keys(u'刘亦菲') # 点击搜索按钮 driver.find_element_by_id('stb').click() # 等待3秒 sleep(3) # 关闭浏览器 driver.close()

【参考】Selenium-Python中文文档
https://selenium-python-zh.readthedocs.io/en/latest/api.html
【参考】Selenium-Python官方文档
https://seleniumhq.github.io/selenium/docs/api/py/api.html
【参考】Python+selenium 自动化-selenium的版本查看和升级
https://blog.csdn.net/qq_38161040/article/details/84134291
326、 爬虫(了解)
http://www.runoob.com/w3cnote/python-spider-intro.html
https://www.yiibai.com/python/python3-webbug-series1.html
https://www.yiibai.com/python/python3-webbug-series2.html
https://www.yiibai.com/python/python3-webbug-series3.html
https://www.yiibai.com/python/python3-webbug-series4.html
传送门 测试开发知识点(一)
测试开发知识点(二)
测试开发知识点(三)
测试开发知识点(四)
测试开发知识点(五)
微信扫一扫关注该公众号【测试开发者部落】

测试开发知识点(五)
文章图片
image.png
点击链接加入群聊【软件测试学习交流群】
https://jq.qq.com/?_wv=1027&k=5eVEhfN
软件测试学习交流QQ群号: 511619105 【测试开发知识点(五)】

    推荐阅读