测试开发知识点(五)
传送门
测试开发知识点(一)
测试开发知识点(二)
测试开发知识点(三)
测试开发知识点(四)
测试开发知识点(五)
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 | 回到命令模式 |
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 |
转义字符 | 含义 |
---|---|
\n | 换行 |
\r | 换行(回车),适用Linux系统 |
\t | 横向制表符 |
注意: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 | 源字符串是否包含指定的文本,列表里面是否包含指定的对象 |
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) | 将整数转成文本(字符串) |
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) | 计算数组的大小 |
# 遍历字典(获取所有的键和值)
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 【测试开发知识点(五)】
推荐阅读
- 深入理解Go之generate
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 小学英语必考的10个知识点归纳,复习必备!
- 女生该不该用小号测试男朋友()
- BNC公链|BNC公链 | Eth2.0测试网Topaz已质押超100万枚ETH
- 我的软件测试开发工程师书单
- echart|echart 双轴图开发
- NPDP拆书(三)(新产品开发战略(经营与创新战略))
- (六)Component初识组件
- 芯灵思SinlinxA33开发板Linux内核定时器编程