测试工程师学习记录

目录

 力扣刷题 

数据库练习

测试学习计划

1.复习python

2.学习UI自动化

3.接口测试——postman

4.性能测试——jmeter、Loadrunner

测试基础知识:

小程序测试:


 力扣刷题 

1603-设计停车系统 简单 定义类及函数

1431-拥有最多糖果的孩子 简单

res = [1]*len(candies)
for i in range(len(candies)):
    res[i] = candies[i]+extraCandies>=max(candies) #将bool值赋值给列表元素
return res

1688-比赛配对次数 简单

1221-分割平衡字符串 简单 贪心

#遍历字符串
#遇到L加1,遇到R减1,减到0说明是一个平衡子串,计数加1
#最后返回计数
res,d =0,0
for i in s:
    if i =='L':
        d+=1
    else:
        d-=1
    if d==0:
        res +=1
return res

数据库练习

2月7日  统计:12

9:21-10:23

2072.赢得比赛的大学   case when

         ➡️case when使用方法

10:37-12:04

2026. 低质量问题   likes/(likes+dislikes)<0.6

1990.统计实验的数量.     union all + cross join + group by platform, experiment_name

13:07-14:10

1978.上级经理已离职的公司员工     manager_id not in (select employee_id from Employees)

1965.丢失信息的雇员    not in + union

1939.主动请求确认消息的用户 join + <> (和!=一个意思)+ timestampdiff。

         ➡️timestampdiff用法   求时间差,timestampdif(单位,时间A,时间B)

14:19-15:01

1890.2020年最后一次登陆    year(time_stamp)查找年份

1873.计算特殊奖金   mod函数 取余

1853.转换日期格式  date_format()函数——date_farmat(day,‘’)

15:21-16:13

1821.寻找今年有正收入的客户 子查询作为数据源

1809.没有广告的剧集。   子查询作为条件,⚠️mysql没有连续判断即,where C.start_time <= A.timestamp <= C.end_time

1795.每个产品在不同商店的价格。  重构表格,union all 行转列

19:46-20:53

1789.员工的直属部门   方法1:union;方法2:case when(没搞懂怎么写)(卡我半天)

1777.每家商店的产品价格       列转行

测试学习计划

1.复习python

(1)阅读黑马python讲义day01-day08,重点看不熟悉的部分,补充json文件知识(在day08)

(2)黑马python讲义day09-day10——讲unittest编程,学习一下unittest编程框架,PDF结合视频学习,重点掌握里面的例子,会自己书写框架

  (3)  学习python数据结构&算法

2月20日:

 跟视频复习python知识 335-355,讲义day01看完,标注不熟悉部分

🎬视频课:软件测试第二篇 python

2月23日:

主要看讲义day02-day07内不熟悉部分,不懂的地方对照视频看讲解365-400

 🎬视频课:软件测试第二篇 python

2月24日:

看讲义day08

  • 369p ——Debug调试代码:打断点,debug运行,可以查看代码运行步骤
  • 随机函数:random.randint(a,b),产生[a,b]之间包含端点的随机整数
    import random
    
    num = random.randint(1,4)
    print(num)
  • 字符串:单引号、双引号、三引号都可以表示字符串,字符串本身有单引号时定义不能用单引号(双、三同理),否则要用转义字符\,一个转义字符只转义一个。字符串前面加上r,\不会作为转义
    name = 'I\'m jenny'
    print(name)            #I\'m jenny
    
    name2 = 'I\\\'m danny'
    print(name2)           #I\'m danny
    
    name3 = r'I\\\'m danny'
    print(name3)    #I\\\'m danny

  • 字符串[start:end:step]    字符串下表、切片
  • 字符串.find(sub_str, start, end)    查找字符串,找到返回sub_str第一次出现时第一个字符串的下表
    #找第一个and出现位置
    a= 'and itcast and ithema and python'
    num = a.find('and')
    print(num)
    #找第二个and出现位置
    print(a.find('and',num+1))
  • 字符串.replace(old_str,new_str,count),返回:替换之后完整的字符串,原来字符串没变化
    a = 'good study'
    b = a.replace('g','G')
    print(b)
  • 字符串链接,将列表内容转为字符串
    list = ['good','good','study']
    print(' '.join(list))        #good good study
    

  •  列表支持下标、切片
  • 列表查找元素下标方法 列表没有find方法,要用index。list.index(数据,start,end)   index()找到返回第一次出现的下标,找不到报错。find找到返回下标,找不到返回-1
    list = ['good','good','study']
    print(list.index('good'))    #0
  • 添加数据

        列表.append(数据)

        列表.insert(下标,数据)   ⚠️原来下标位置有数据是,原数据会后移                

list = ['good','good','study']
list.insert(0,'never')
print(list)

        列表1.extend(列表2)      #列表合并

  • 删除操作

        列表.pop(下标)    #返回:删除的数据

        列表.remove(数据值)  #返回:None ⚠️要删除掉的数据不存在时,报错

list = ['good','good','study']
print(list.pop(0))     #good
list.remove('good')
print(list)            #study
  •  列表反转:

        列表[::-1]

        列表.reverse()      #直接修改原列表,返回None

  • 列表排序:

        列表.sort()  #按照升序排列

        列表.sort(reverse=True) #按照降序排列

  •  元组    基本用法和列表一致

        元组内容不能改变,只能查看,列表数据可以改变;

        元组可以使用下标、切片获取元素;

        元素存在index方法,查找不存在会报错;

        元组可以使用count方法,可以用in操作              

  • 字典

        删除操作:del 字典[键]   

                          字典.pop(键) 

        清空:字典.clear()

        查询:字典[键]

                   字典.get(键)

  • 集合 
    #集合 set 无序 不重复
    set1 = {1,2,3,46,7}
    set2 = {2,5,7,0,8,4}
    
    #下面两种求交集方法
    print(set1.intersection(set2))
    print(set1 & set2)
    
    #求并集
    print(set1.union(set2))
    print(set1 | set2)
    
    #求差集
    print(set1.difference(set2))   #set1中没有在set2中的元素
    print(set1 - set2)
    
    #求交叉补集,两个集合中只出现一次的元素
    print(set1.symmetric_difference(set2))
    print(set1 ^ set2)
    
    #⚠️集合里的元素不能通过下标读取

  • 函数

        变量的引用:将数据保存到变量的内存中,本质是将数据的地址保存到变量对应的内存中;

        id()获取变量中的引用地址,如果两个变量的id()获取的引用地址一样,代表两个变量用了同一个数据;

        只有赋值运算符=可以改变变量的引用

        可变与不可变类型()

        可变类型做参数,在函数内部如果不使用=改变形参的引用(使用pop、append修改),对形参的修改会同步到实参中

  • 组包和拆包  437p
    #拆包
    num=[1,2,3,4]
    a,b,c,d = num
    print(a,b,c,d)      #1 2 3 4
  • 局部变量&全局变量

        函数内部使用,如果想在函数外部使用,需要用return返回;

        函数中存在和全局变量名字相同的局部变量,在函数中使用的是局部变量的值(就近)

num = 20  #全局变量
def func1():
    print(f'func1中的{num}')


def func2():
    num = 30
    print(f'func2中的{num}')


def func3():
    global num
    num = 40
    print(f'func3中的{num}')
func1()    #20
func2()    #30
func3()    #40

        在函数里不能直接修改全局变量,需要声明才可以 (不建议,代码多时不易调试)

name = “Jenny”
def change_name():
    global name  #声明全局变量
    name = "denny"
  • 函数传参方式 

        位置传参

        关键字传参

        混合传参:关键字传参需要写在位置传参的后面,不要给一个形参传递多个数据值

        缺省参数:放在普通参数后面

  • 多值参数:

        不定长位置参数(不定长元组参数) *args

        不定长关键字参数(不定长字典参数) **kwargs

        def func(普通参数,*args,缺省参数,** kwargs)

        非固定参数  参考路飞python day5函数编程

def stu_register(name,age,*args): #*args 会把多传⼊入的参数变成⼀一个元组形式
    print(name,age,args)

stu_register("alex",33)    #alex 33 ()


def stu_register2(name, age, *args, **kwargs):
    print(name, age, args, kwargs)

stu_register2("alex", 22)  #alex 22 () {}
  •  print函数

        print(1,2,sep='_') #sep='':参数间隔     end=''

面向对象 

  • 类的组成:类名,属性,方法 
  • 类的属性:在内部写在__init__方法中(实例属性);在类内部方法外部直接定义的变量是类属性
  • 类中的方法:(1)实例方法:就是定义函数,不过第一个参数是self(self的理解还是不太懂,day06/p17)(2)类方法:在类方法上写@classmethod,方法中不需要使用实例属性(self),使用类属性就可以将这个方法定义为类方法
  • 方法和属性可以设置访问控制权限,私有权限:__属性名/方法名,私有权限只能在当前类的内部使用
  • 继承:class A(object)

文件——day08

  • 文件类型:

                        文本文件:能够使用记事本软件打开转换为文字,txt md py html css js json

                        二进制文件:不能使用记事本打开,exe mp3 mp4 jpj png

  • 文件操作:打开文件,读写文件,关闭文件
  • json文件:

                        读取:json.load(文件对象)

                        写入:json.dump() (不懂怎么写入)

unittest框架(需要实战理解,比较抽象,不知道怎么用)

  • python自带框架:unittest,radom,json,os,time;第三方框架:selenium,appium,requests
  • UnitTest要素:

                                TestCase:写用例代码

                                TestSuite:测试套件,管理组装多个TestCase

                                TestRunner:执行

                                TestLoader:测试加载

                                Fixture:测试夹具

2.学习UI自动化

👇学习计划

黑马UI自动化讲义(参考1024集)

day01-day04——讲元素获取定位等基础知识

可以先看day05——讲python里面的pytest编程

day06——讲代码封装问题

🎬视频参考➡️web自动化入门实战黑马头条项目,软件测试突击实战自学视频

📒学习笔记

(1)自动化测试:适合在回归测试时使用,项目周期长,需求稳定

(2)web自动化工具:QTP,Robot Framework(基于python,可以结合requests实现接口测试)

                        selenium(开源免费,支持不同浏览器兼容问题,支持多平台(不同操作系统),支持多语言(java,python等等)

(3)selenium工作原理

python 通过http请求向webdriver发送请求,进一步通过http向浏览器发送请求

(4)元素定位

  元素:由标签头、标签尾、头尾中间的信息构成

#ID定位:前提:元素必须有ID属性值
driver.find_element_by_id(id)    

#class定位:元素有多个值时,只需要取其中任一个都可以
driver.find_element_by_class_name(class_name)

#name定位:
driver.find_element_by_name(name)

#tag_name定位:不建议,因为tag_name 相同的很多
driver.find_element_by_tag_name(tag_name)

#link_text定位:link_text参数表示的是a标签元素的全部文本内容
              #通过a标签的全部文本内容来定位a标签
driver.find_element_by_link_text(link_text)

#partial_link_text定位:使用a标签元素的局部文本内容
driver.find_element_by_partial_link_text(参数)

#xpath定位:
driver.find_element_by_xpath(xpath)
‘’‘xpath表达式
   路径定位                      属性定位class属性需要全部属性值            路径与属性结合
 1.绝对路径:/html/body/。。。    //*[@属性名称=属性值]
 2.相对路径://div/p/input       //标签名[@属性名称=属性值]’‘’

#css定位:
id选择器:#id
class选择器:.class
属性选择器:[tag(属性名称)='value'(属性值)]   ⚠️:class属性需要全部的值
层级选择器:(1)父子层级:Element1>element2
           (2)隔代层级:不需要大于号

(5)元素操作

点击:element.click()

清除:element.clear()

输入:element.send_keys()

(6)浏览器常用方法

窗口最大化:driver.maximize_window() 

获取浏览器窗口标题:driver.title

(7)元素常用方法

获取元素信息:element.text

获取元素的属性值:element.get_attribute("attribute")

———————————————————————————————————————————

🎬参考视频➡️8天带软件测试人员搞定web测试自动化,黑马测试真实上课视频

📒笔记

        PO模式:

                        base 基类——基础的公共方法,page页面一些公共方法(给page页面用)

                                               初始化、查找元素方法(提供点击、输入、获取文本使用)、 点击、输入、获取文本方法、截图方法

                        page 页面层——页面涉及的对象放到一起,一个页面封装一个对象,使用导包/继承调用base里的公共方法

                        scripts(cases) 业务层 导包调用page 

#导包
import unittest
from 页面层路径 import 对象 
新建测试类
    初始化方法
    结束方法
    新建测试方法


以下学习不分前后顺序,每种测试对应一种软件学习,时间充足可以先看每个部分的基础知识,希望快速可以先看软件学习及实例,遇到不懂的知识点再倒回去看基础知识

3.接口测试——postman

黑马接口测试讲义

day01-day02——接口基础知识,要知道URL获取、http请求

day03-day04——postman软件使用

🎬Python结合requests库实现接口自动化测试,含如何搭建接口自动化次数框架及mock测试

📒笔记

4.性能测试——jmeter、Loadrunner

 

测试基础知识:

1.缺陷

  • 缺陷状态:新建(激活)->打开->修复->关闭
  • 缺陷严重程度:致命   -   严重   -   一般   -   建议
  • 缺陷优先级:高   -   中   -   低
  • 缺陷类型:代码错误   -   设计缺陷   -   性能问题   -   安全相关(账号密码容易泄露,容易被黑客攻击)

2月20日

学习黑马白盒测试用例设计方法(主要偏理论,没有敲代码),45min*2听完下面的课程

🎬视频课:白盒测试用例设计-黑马

📒笔记:参考➡️白盒测试用例设计

学习6种逻辑覆盖和基本路径覆盖

白盒测试:又称为逻辑驱动测试

代码走查:一组开发人员对代码进行审核,主要由其他人而非代码的作者完成


学习黑马黑盒测试用例设计方法 

🎬黑盒测试用例设计方法-黑马

📒

黑盒测试:又称为数据驱动的测试输入/输出驱动的测试。使用这种测试方法将程序视为一个黑盒子,测试目标与程序内部机制和结构完全无关,将重点放在发现程序不按其规范正确运行的环境条件。

1.等价类:在测试数据中,具有某种共同特征的数据子集

有效等价类:满足需求;无效等价类:不满足需求

适用场景:需要有大量数据测试输入,但没法穷举测试的地方,例如页面输入框类测试

  • 输入框 
  • 下拉列表
  • 单选复选框

步骤:

  1. 明确需求
  2. 确定有效和无效等价类
  3. 提取数据

练习:

参数长度类型规则
区号1.空 2.3位

 2.边界值:大量错误发生在输入或者输出范围的边界上,而不是在输入范围的内部;

                  选取刚好等于、刚刚好大于或者刚刚好小于边界值作为测试数据

操作步骤:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATHlkaWHnprvnur8=,size_20,color_FFFFFF,t_70,g_se,x_16

eg.

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATHlkaWHnprvnur8=,size_20,color_FFFFFF,t_70,g_se,x_16

3.判定表法:条件的全组合

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATHlkaWHnprvnur8=,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATHlkaWHnprvnur8=,size_20,color_FFFFFF,t_70,g_se,x_16

 4.因果图法:分析输入和输出,先考虑条件和条件之间的关系,条件与结果的关系,在转换为判定表

5.状态迁移图,分析状态节点,出去路径作为测试用例

6.场景法:软件是用事件触发控制流程的,时间触发时的情景形成场景

基本流,备选流

7.正交试验法:分析因子与水平

8.错误推测法



 API是什么意思? 参考➡️API是什么

小程序测试:

1.要求:注重用户体验

  • 导航明确(导航需要高亮);
  • 反馈明确(toast提示不超过3秒),弹窗提示(有文字的时间需要长一点),需要用户点击确定、取消的对话框测试(有交互的提示)
  • 重点突出,选中的时候有高亮显示
  • 每个应用层级不超过3层
  • 源码文件大小不超过20M,单个分包不超过2M

2.测试工具:👉微信开发者工具

3.小程序文件:(1)WXML(小程序的前端语言),.wxml文件:WXML模板文件

                     (2)WXSS(不用web项目前端框架,只是简单的标签语言) .wxss文件:WXSS样式文件

                      (3)JS .js文件:JS脚本逻辑文件

                       (4).json文件:json配置文件

4.小程序通讯模型:小程序无法和后台服务器直接通讯,需要借助微信客户端

5.小程序测试和app测试区别:

  • 安装部署方面:小程序不需要安装,不需要注册,只需要授权,可以兼容各种手机,app需要不同移动操作系统分别开发
  • 小程序入口:发现点小程序,下拉进入,分享的链接进入

 6.LAMP部署:vm+centos7

                         一键部署环境👉LNMP一键安装包无人值守命令生成器

     安装完成后验证:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值