软件测试高频考题

1. 软件测试的目的与原则是什么?

目的

  1. 通过测试工作可以发现并修复软件当中存在的缺陷;
  2. 可以降低同产品开发遇到的风险;
  3. 记录软件运行过程中的一些数据,从而为决策者提供技术支持。

原则:

  1. 缺陷集群性,2/8定律:核心功能占20%,非核心占80%,我们会集中测试20%的核心功能,发现缺陷的几率会高于80%,因此,遇到的缺陷都会集中20%功能模块里。
  2. 穷尽测试是不可能的:有些功能是无法将所有测试情况逻辑出来的,任何的测试都有结束的时间。
  3. 测试需要尽早介入:为了更好地发现和解决软件中的缺陷。
  4. 杀虫剂悖伦:同样的一个测试用例不能重复执行多次,不然软件会对它产生免疫
  5. 测试显示软件存在缺陷
  6. 测试活动依赖于测试内容:某些测试需要依赖于特殊的环境
  7. 没有错误是好是谬论:任何软件都不可能是完美的

2. 测试人员在测试中的任务是什么?

  1. 尽早的找出系统当中的Bug
  2. 避免软件开发过程中缺陷的出现
  3. 确保缺件的质量
  4. 关注用户的需求,并保证系统符合用户需求

3. 缺陷报告内容包括什么?

  1. Bug的优先级
  2. Bug的严重程度
  3. 开发的接口人员,与Bug产生对应的软件版本
  4. Bug可能属于的模块。如果不能确认,可以由开发人员来判读
  5. Bug标题,需要清晰的描述现象
  6. Bug描述,需要尽量给出新的Bug步骤
  7. Bug附件中能给出相关的日志与截图

4. 请您描述一下测试的V模型?

用户需求-需求分析-概要设计-详细设计-编码-单元测试-集成测试-系统测试-验收测试


V模型.png

5. 性能测试关注的指标是什么?

  1. 用户数
    ①注册用户数
    注册用户数指软件中已经注册的用户,这些用户是系统的潜在用户,随时都有可能上线。这个指标的意义在于让测试工程师了解系统数据中的数据总量和系统最大可能有多少用户同时在线。
    ②在线用户数
    在线用户数是指某一时刻已经登录系统的用户数量。在线用户数只是统计了登录系统的用户数量,这些用户不一定都对系统进行操作,对服务器产生压力。
    ③并发用户数
    不同于在线用户数,并发用户数是指某一时刻向服务器发送请求的在线用户数,他是衡量服务器并发容量和同步协调能力的重要指标,从这个含义上讲,我们可能会如下两种理解:
    同一时刻向服务器发送相同或者不同请求的用户数,也就是说,既可以包括对某一业务的相同请求,也可以包括对多个业务的不同请求
    同一时刻向服务器发送相同请求的用户数,仅限于某一业务的相同请求
  2. 事务的响应时间
    事务是指用户在客户端做一种或多种业务所做的操作集,事务的响应时间就是衡量用户执行这些操作集所花费的时间。在性能测试中,一般通过计算事务的开始时间和结束时间的差值来获取事务的响应时间。
    一个事务表示一个“从用户发送请求->web server接受到请求,进行处理-> web server向DB获取数据->生成用户的object(页面),返回给用户”的过程,一般的响应时间都是针对事务而言的。
  3. 每秒点击数
    每秒点击数是指每秒钟像web服务器提交的HTTP请求数,它是衡量服务器处理能力的一个常用指标。需要注意的是,这里的相应时间并非鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求,切勿混淆。
  4. 吞吐率
    吞吐率通常指单位时间内从服务器返回的字节数,也可以单位时间内客户提交的请求数。吞吐率是大型web系统衡量自身负载能力的一个重要指标,一般来说,吞吐率越大,单位时间内处理的数据就越多,系统的负载能力也强。吞吐率与很多因素有关,服务器的硬件配置,网络的宽带及拓扑结构,软件的技术架构等。
  5. 业务成功率
    指多用户对某一业务发起操作的成功率。例如,测试网络订票系统的并发处理性能,在早上8:00——8:30半小时的高峰里,要求能支持10万比订票业务,其中成功率不少于98%。也就是说系统允许200笔订票业务超时或者因其他原因导致未能订票成功。
  6. TPS - 吞吐量
    TPS表示服务器每秒处理的事务数,他是衡量系统处理能力的一个非常重要的指标,在性能测试中,通过检测不同用户的TPS,可以估算出系统处理能力的拐点。
  7. 资源利用率
    资源利用率就是指资源的使用情况
    CPU使用率70%—80%,内存使用率80%以下
    网络带宽利用率 100Mbps=12.5MB/s
  8. QPS - 查询率
    QPS:每秒查询率,因特网上经常用每秒查询率来衡量域名系统服务器的机器的能。
    对应请求数/sec,即每秒的响应请求数,也即是最大吞吐能力。
  9. 错误率:一批请求中结果出错的请求所占比例。

6. Bug不能复现怎么办?

  1. 首先考虑环境问题,看是否能够还原原来的环境
  2. 遇到问题就要提,不能放过任何一个Bug,在提交的Bug描述中加上一句话,那就是复现概率,尝试20次,出现一次或尝试10次,交给开发,开发会根据Bug的复现概率,调整改Bug的优先级。
  3. 尽量回想发生问题时的复现步骤,不要漏掉任何一个细节,按照步骤的组合尝试复现
  4. 与开发人员配合,让开发人员对相应的代码检查,看是否通过代码层面检查出问题。

7. 什么是Http协议,请求方法是什么?Http协议与Https协议的区别?

  1. Http协议:又叫超文本传输协议,是定义了一个客户端到服务器请求与应答的标准。
  2. 请求方法:get、post、head、delete、put、peach
  3. HTTPS协议:以安全为目标的HTTP通道,简称Http的安全版。
  4. HTTPS与HTTP的区别:
    A. http协议需要ca申请证书,一般免费证书较少,需要一定费用。
    B. http的链接简单,是无状态的,而https协议是由SSL+http协议构建的可进行加密传输,身份认证的网络协议要比HTTP协议安全。
    C. http协议是超文本协议,又叫明码传输,而https是具有安全性的SSL加密传输协。
    D. http协议与HTTps协议使用的链接方式不同,一个用的端口是80(http),一个是443(https)。

8. get请求与post请求的区别?

  1. Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
  2. Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
  3. Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
  4. Get执行效率却比Post方法好。Get是form提交的默认方法。

9. 列表与元组的异同点

  • 相同点

    • 都是序列
    • 都可以存储任何数据类型
    • 可以通过索引访问
  • 不同点

    • 语法差异:列表使用[]创建,元组使用()创建
    • 是否可变:列表是可变的,而元组是不可变的,这标志着两者之间的关键差异。可以修改列表的值,但是不修改元组的值。
    • 重用与拷贝:元组无法复制。 原因是元组是不可变的。
    • 大小差异:Python将低开销的较大的块分配给元组,因为它们是不可变的。 对于列表则分配小内存块。 与列表相比,元组的内存更小。 当你拥有大量元素时,元组比列表快。列表的长度是可变的。
    • 同构与异构:习惯上元组多用于用于存储异构元素,异构元素即不同数据类型的元素,比如(ip,port)。列表用于存储同构元素,这些元素属于相同类型的元素,比如[int1,in2,in3]。

10. APP测试与Web测试的区别?

  • 相同点:
    同样的测试用例方法相同。
    同样的测试方法:都会依据原型图或效果图来检查UI。
    测试应用系统的稳定性。
  • 不同点:
    1. app测试平台:百度云测,testin云测不同。
    2. App的安装卸载:全新安装,升级安装,第三方工具安装,第三方工具卸载,直接卸载删除,消息推送测试,手机授权测试,前后台切换,网络环境(wifi/2G/3G/4G/无网络)。
    3. App的中断测试:来电中断,短信中断,蓝牙,闹钟,拔插数据线,手机锁定,手机断电,手机问题(系统死机重启)。
    4. 兼容性测试:Web项目考虑不同浏览器的兼容,app需要考虑手机不同的操作系统,不同机型,不同屏幕等。
    5. 网路测试:不同网络与运营商,目前我国有三大运营商如:电信,移动,联通,不同的网络制式,如:GSM,CDMA,3G等,在不好或无网络的情况下的APP行为。
    6. 操作系统:大量的设备,各种的操作系统,目前使用最多的操作系统有:Android,ios,windows,blackberry等,它们之间的应用软件互不兼容。如设备不同:触摸式与非触摸式设备,有限的内存容量,电池耗电量,屏幕尺寸,分辨率等。

11. BS/CS架构的区别是什么?

概念:所谓的架构就是用来指导我们软件开发的一种思维,目前最常见的就是BS/CS。

  1. B -- browser 浏览
  2. C -- client 客户
  3. S -- server 服务端

区别:

  1. 标准:相对于C/S架构来说B/S架构的两端都是使用现成的成熟产品,B/S会显示的标准一些。
  2. 效率:相对于B/S架构来说C/S中的客户端可以分担一些数据的处理,执行效率会高一些。
  3. 安全:B/S架构当中得到数据的传输都是以Http协议进行传输的,而Http协议又是明文输出。可以被抓包,那么B/S架构相比C/S架构显得就不那么安全了
  4. 升级:B/S架构只需要在服务器端将数据进行更新,前台只需要刷新页面就可以升级,而C/S架构必须要将两端都进行更新才可以。
  5. 开发成本:相对于B/S架构来说C/S当中的客户端需要自己开发,B/S不用,所以说C/S成本会高一些。

12. 举例说一下你的接口测试是怎么做的?

  1. 下单这个接口用的是http协议,使用post请求方式,发送给服务器的参数有token,产品ID,购买数量,收货人地址等等,这些参数都是必传的参数。
  2. 我们是使用Jmeter来做接口测试的,首先,要新建一个线程组,在线程组下面添加一个http的请求,然后填写好服务器地址,接口路径,请求方式,请求参数。
  3. 由于下单的接口依赖于登录,所以我们会先调用登录接口,从中获取token值,在下单接口中使用${参数名}的方式引用,接下来还要对其他参数进行参数化,构造各种正常和异常的数据,我们先在本地创建一个txt文档,把参数填写到文档里面,在Jmeter中添加一个csv文件设置,填写好txt文档的路径,然后在请求参数中使用Json提取器把token值关联出来,然后在下单接口中使用${参数名}的方式引用;接下来添加断言,检查服务器返回的结果和预期结果是不是一致的。
  4. 最后,添加查看结果树查看测试结果。

13. Android手机和IOS手机,系统有什么区别?

  1. 运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制
  2. 两者后台制度不同:IOS中任何第三方程序都不能在后台运行,安卓中任何程序都能在后台运行,直到没有内存才会关闭
  3. IOS中用于UI指令权限最高,安卓中数据处理指令权限最高

14. 缺陷引起原因

  1. 软件结构复杂
  2. 编码问题
  3. 使用新技术
  4. 需求不明确或者更改需求
  5. 项目周期短,时间紧迫

15.接口测试流程?

项目启动后,测试人员尽早找开发人员拿到接口文档,获取接口文档后进行接口用例的编写和调试,完成后部署到持续集成的测试环境中,进行接口的日常监控,定期对接口脚本的维护更新,接口异常的处理。

  1. 首先要看有没有接口文档,如果有文档的时候按接口文档去做,没有的话就去抓包。

  2. 我们一般使用postmian以及jemter.

  3. 没有接口文档的情况下,要先创建一个线程组,指定并发的线程数量,在指定测试的接口,创建相应的监听器,(如,表格结果,结果树,以及聚合报告信息)通过监听器来进行监听测试是否通过以及接口存在什么问题。

16. 你以前工作时的测试流程是什么?(自己编写,结合表格)

先要有需求评审(有开发人员---产品经理---测试人员---项目经理)需求确定(出一份确定好的需求文档)开发设计文档(开发人员在开始写代码前就能够输出设计文档)制定测试计划---写出测试用例---发给开发人员与测试经理看一下---接到测试版本---执行测试用例---提交Bug---交给开发人员修改---回归测试。

17. 当你参加评审时,你的评审原则是什么?

首先要从正确性,一致性,可行性,必要性,可跟踪性,分配优先级,可测性,可修改性考虑:
正确性:每一条需求都必须准确的陈述其要开发的功能。
一致性:必须与其他软件需求或高层需求不相矛盾。
可行性:其每一项需求都必须是已系统和环境的权能和限制范围可以来实施的。
必要性:每项需求都是用来授权你编写文档的“根源”,要使每项需求都能回潮至某项客户的输入。
可测性:每项需求都能通过设计测试用例或其他的验证方法来进行测试。
可修改性:每项需求只应在SRS中出现一次,这样更改会容易保持一致性。
可跟踪性:在每项软件需求与它的根源与设计元素,源代码,测试用例之间建立起链接,而这种可跟踪性要求每项需求都必须以一种结构化的,粒度好(fine-grained)的方式编写
分配优先级:应当对所有的需求分配优先级,如把所有需求都看作同样重要,那么项目管理者在开发或节省预算或调度中丧失控制自由度

18.软件测试的需求标准是什么?

  1. 文档版本信息:包含文档版本,作者,完成日期,修订版需要加上修订记录(版本号,修订者,日期,内容)。
  2. 目录结构要清晰,不同级别的标题要区分字号。
  3. 产品架构:一般只有功能以及信息架构,
  4. 功能:一级-二级,三级功能要划出。以及产品特性(功能列表,原型界面,详细设计)。

19.请写一下W模型图

image.png

20. 软件质量的特性是什么?

  1. 功能性:软件需求要满足用户显示或者稳式的功能。
  2. 易用性:软件易于学习和上手使用。
  3. 可靠性:软件必须实现需求当中指明的具体功能。
  4. 效率性:类似于软件的功能。
  5. 可维护性:需求软件具有将某个功能修复之后继续使用的功能。

21. 测试计划工作的目的是什么?测试计划文档的内容包括什么?

目的:明确测试任务与测试方法,保持测试实施过程的顺畅沟通。
内容:测试目的、测试资源、测试范围、测试风险、人员分工、测试策略、测试准则、测试进度、提交测试文档。

22. 搭建过什么环境,搭建工作环境是如何搭建的?

搭建过web测试环境 app测试环境等
个人PC(windows)可以搭建测试环境,但是由于个人PC硬件和软件的局限性,我们一般不使用其搭建测试环境,但如果是自己做模拟实验是没问题的。但是在企业中我们一般都不使用windows平台搭建服务器,而是选择Linux平台。这是因为我们经常选择Linux平台作为服务器的操作系统。搭建测试环境
如果你需要搭建的测试环境是刚装的Linux操作系统,
通常测试环境包括JDK环境,Tomcat环境和MySQL环境
下边是安全配置的步骤,大家可以理解,不用强背...,面试的时候,可以说就从网上找一份文档,按照文档进行配置

1.安装jdk
如果有自带,先卸载再装
  1.把包复制/usr/local
  2.解压
  3.配置环境变量
  export JAVA_HOME=/usr/local/jdk1.7.0_71
  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  export PATH=$JAVA_HOME/bin:$PATH
  4.检查java是否安装成功
  java -version

2.安装tomcat
  1.把下载的tomcat包复制/usr/local
  2.解压
  3.在tomcat/bin目录执行startup.sh文件
  启动服务
  在浏览器中连接:IP:8080
  4.如果连接不上,但tomcat又是显示启动OK,检查firewall
  路径为 /etc/sysconfig/iptables,将8080端口开启
  5.重启服务

3.安装数据库
数据库一般安装mysql和oracle多一些
首先下载相应的数据库安装包
mysql安装比较简单,可以使用源码安装,也可以使用yum在线安装,在这里简单地介绍一下yum在线安装
用yum在线安装
  1. rpm -qa|grep mysql --检查Linux是否有存在的mysql
  2.如果有mysql,卸载
  rpm -e --nodeps mysql
  3.安装
  yum install mysql-server mysql mysql-dev -y
  4.安装成功后,启动服务
  service mysqld start
  service 服务名 restart/start
  5.直接输入mysql 进入到数据库
以上的只会在干净的操作系统上进行安装,一般来说只需要安装一次

23. 怎样保证覆盖用户需求

项目开始前,我们会先熟悉需求,画好流程图,保证整个流程都覆盖全面来讲解一下自己对测试点的理解,用例编写完之后,再进行用例的评审,看看测试点有没有用遗漏,测试场景是否覆盖完全。

24. 开发环境与测试环境有什么区别?

开发环境:是在编码阶段,一般我们的代码基本上都是在开发环境中,不会再生产与测试环境,如操作系统,web服务器,语言环境,php,数据库等等。
测试环境:项目完成后,找Bug,以及修改Bug。

生产环境: 项目数据前后端已经疏通,部署到阿里云上有客户去使用以及访问,网络正常运行就好了。

25. 如果给你购物商城网页(京东,淘宝等)你会怎样进行测试?测试哪些主要功能?

  1. 首先要先进行需求分析,xmind梳理测试点,编写案例,案例评审,寻求他人意见,再完善案例,交给其他人检查。
  2. 测试点:如UI,美观度,易操作型,易理解型方面进行测试。
  3. 在考虑功能点,如登陆注册,添加购物车,下单,付款,发货,确认收货,评价。
  4. 性能方面:如打开网页,确认订单,付款的响应时间等。
  5. 兼容性:如支持各种主流浏览器,如(EI,360,火狐,谷歌等)。

26.红包的测试用例?

  1. 功能:
    a)在红包钱数,和红包个数的输入框中只能输入数字
    b)红包里最多和最少可以输入的钱数 200 0.01
    c)拼手气红包最多可以发多少个红包 100
    d)超过最大拼手气红包的个数是否有提醒
    e)当红包钱数超过最大范围是不是有对应的提示
    f)当发送的红包个数超过最大范围是不是有提示
    g)当余额不足时,红包发送失败
    h)在红包描述里是否可以输入汉字,英文,符号,表情,纯数字,汉字英语符号,
    i)是否可以输入它们的混合搭配
    j)输入红包钱数是不是只能输入数字
    k)红包描述里许多能有多少个字符 10个
    l)红包描述,金额,红包个数框里是否支持复制粘贴操作
    m)红包描述里的表情可以删除
    n)发送的红包别人是否可以领取
    o)发的红包自己可不可以领取 2人
    p)24小时内没有领取的红包是否可以退回到原来的账户
    q)超过24小时没有领取的红包,是否还可以领取
    r)用户是否可以多次抢一个红包
    s)发红包的人是否还可以抢红包 多人
    t)红包的金额里的小数位数是否有限制
    u)可以按返回键,取消发红包
    v)断网时,无法抢红包
    w)可不可以自己选择支付方式
  2. 兼容:
    a)苹果,安卓是否都可以发送红包
    b)电脑端可以抢微信红包
    c)界面
    d)发红包界面没有错别字
    e)抢完红包界面没有错别字
    f)发红包和收红包界面排版合理,
    g)发红包和收到红包界面颜色搭配合理
  3. 安全:
    a)对方微信号异地登录,是否会有提醒 2人
    b)红包被领取以后,发送红包人的金额会减少,收红包金额会增加
    c)发送红包失败,余额和银行卡里的钱数不会少
    d)红包发送成功,是否会收到微信支付的通知
  4. 易用性(有点重复):
    a)红包描述,可以通过语音输入
    b)可以指纹支付也可以密码支付

27. 写好测试用例的关键 /写好用例要关注的维度?

  1. 覆盖用户的需求;
  2. 从用户使用场景出发,考虑用户的各种正常和异常的使用场景;
  3. 用例的颗粒大小要均匀。通常,一个测试用例对应一个场景;
  4. 用例各个要素要齐全,步骤应该足够详细,容易被其它测试工程师读懂,并能顺利执行;
  5. 做好用例评审,及时更新测试用例。

28.Jmeter的是如何进行测试的?(请您介绍一下Jemeter是如何使用的?Jemeter如何进行压力测试?)

  1. 打开JMeter
  2. 创建线程组
  3. 设置线程数和循环次数。我这里设置线程数为500,循环一次
  4. 添加HTTP采样器
  5. 配置我们需要进行测试的程序协议、地址和端口
  6. 构造HTTP请求
  7. 添加HTTP请求头
  8. 添加断言
  9. 添加察看结果树
  10. 添加Summary Report
  11. 执行测试计划,执行测试计划不能用GUI,需要用命令行来执行
  12. Web报告

29.Jmeter的连接数据库

  1. 添加需要的驱动
  2. 添加jar包
  3. 配置JDBC Connection Configuration
  4. 添加JDBC Request

30.Jemeter为什么要参数化?

  1. 多用户登录的时候,如果不进行参数化就没演示了。
  2. 需要使用CSV将参数放到文件,来演示多用户登陆。
  3. 在进行录制的时候,有可能存在第二个请求的参数是从第一个请求中获取出来的,需要在第一个请求下,去将参数提取出来,再到第二个请求中进行参数化

31. Jemeter中有哪些常用元件?

面试宝典P140

32. 如果你要进行性能测试,你是如何展开操作的?

  1. 确定关键业务,关键路径
  2. 确定输入参数以及输出参数,指定负载测试方案
  3. 准备测试环境,完成脚本录制,或者测试脚本开发
  4. 执行测试,观察或输出参数,如(数据吞吐量,响应时间,资源占有率等)
  5. 对测试结果进行分析

33. 自动化测试有了解吗?自动化测试的工具有哪些?(了解)

常用的自动测试框架工具:Selenium、Appium、unittest、pytest等。

34. Selenium元素定位方法有哪些?

通过id、name、class_name、xpath、css_selector、link_text、partial_link_text、tag_name定位元素。
一般,如果有id就使用id,然后使用css或者xpath来定位,当然定位的时候,需要在浏览器里边安装firebug firepath来抓取页面元素对应的xpath信息。

35. 安全性测试包括哪些方面?

用户验证,用户权限管理,系统数据的保护

36.为什么要进行抓包?

  1. 有些时候公司没有标准的接口文档,测试人员只能抓包来获取接口测试。
  2. 抓包可以迅速找到请求,通过抓包可以查看整个请求的过程,以及响应时间,还可以分辨前台与后台Bug。
  3. 通过抓包,可以查看是否有敏感信息,如(用户密码,个人账户信息等数据)
  4. 可以通过抓包进行测试,拦截请求,修改请求数据,查看对应的响应结果,抓包本身就是接口的一部分。

37. 一般抓包用什么工具,怎么进行抓包?

工具上使用:Fiddler、Charles这两个工具
Fiddler:
A. 设置Http代理,设置端口号,在手机上设置与fiddler在同一网段上,设置代理ip,设置代理端口,手机上的请求就能获取到了。
B. 抓取请求查看,可以过滤,找到自己域名下的请求,通过分析请求地址,请求参数,响应结果来查找问题。

Https包怎么抓?
A. http与Https协议区别在于Https多了一个ssL协议,更加安全,默认端口是443,而http默认端口是80.
B. 抓取Https时,需要获取申请证书,在fiddler与charles两个工具中,可以模拟下载966证书,下载后,在手机上访问代理服务器的ip与端口,下载证书,就可以抓取到HTTPS的请求了。

38. 你都做过什么测试

功能测试、用户体验测试、性能测试、UI测试、兼容性测试、安装测试、文档测试、稳定性测试等。

在公司中大部分是做的功能与接口测试。

39. 如果回归测试不通过怎么办?

  1. 首先考虑环境问题,看是否能够还原原来的环境
  2. 遇到问题就要提,不能放过任何一个Bug,在提交的Bug描述中加上一句话,那就是复现概率,尝试20次,出现一次或尝试10次,交给开发,开发会根据Bug的复现概率,调整改Bug的优先级。
  3. 尽量回想发生问题时的复现步骤,不要漏掉任何一个细节,按照步骤的组合尝试复现
  4. 与开发人员配合,让开发人员对相应的代码检查,看是否通过代码层面检查出问题
  5. 保留发生bug时的log,附加到提交的Bug中,希望可以通过log中找到一些蛛丝马迹。
  6. 查看代码,也许是代码变更,引起的Bug

40. 测试报告包括哪些?

  1. 概述
    1. 编写目的:测试报告的描述、项目简介、测试内容描述。
    2. 人员分工:姓名、职务、任务
    3. 测试环境:软件、硬件环境
  2. 测试过程
    1. 测试进度:测试任务、测试负责人、启动时间、计划完成时间、实际完成时间、备注
    2. 用例执行情况:模块、用例总数、执行用例数、通过用例数、未通过用例数、阻塞用例数
    3. 缺陷统计:模块、bug总数、新增bug总数、修复bug总数、遗留bug总数
  3. 缺陷分析
    1. 按照级别分:
    2. 按照缺陷模块分:
    3. 按照缺陷类型分:版本、趋势
  4. 测试总结
    1. 测试结论:是否通过。各种率、按级别描述缺陷
    2. 风险分析:编号、风险描述、规避方法和建议
    3. 遗留问题:编号、缺陷描述、缺陷等级、处理方法

41. 测试用例评审的流程是什么?

目的:主要是为了开展测试用例评审工作提供指引,规范测试用例管理工作。
流程:
测试用例是否按照公司定义的模板进行编写的;
测试用例的本身的描述是否清晰,是否存在二义性;
操作步骤应与描述是否相一致;
测试用例是否覆盖了所有的需求;
测试用例是否具有可执行性
测试用例应有正确的名称和编号,
测试用例应标注有执行的优先级。

42.怎样分析性能测试结果?

  1. 查看聚合报告和服务器的资源使用图,检查响应时间,事务成功率,CPU,内存和IO使用率是否达到要求,如果出错率达到了总请求数的3%,我们会检查是什么原因导致的,修改好后,重新测试;
  2. 如果出现了性能瓶颈,比如响应时间,或者CPU使用率不达标,我们会从服务器上导出日志,分析是哪个地方导致响应时间过长,如果分析不出来,就叫上开发一起讨论,确定问题后,就提单给开发修复,修复好了就进行回归测试。

43.请说几个常见的状态码?

200:请求发送成功。
302:代表重定向。
400:客户端发送的请求语法错误。
401:请问的页面没有授权。
403:没有权限访问这个页面。
404:没有这个页面。
500:服务器内部异常。

44. 请描述下接口测试与UI测试是如何协同测试的?

  1. 有一部分是重叠的,Ui测试是通过前端写的界面,是来调用接口的,而接口测试是直接调用接口。
  2. 排除前端的处理逻辑与调用的正确性,在理论上接口测试是可以覆盖所有的Ui测试,但实际中,如接口层覆盖所有的业务流,在Ui上只测试前端的逻辑,而最终的结果会忽视很多原有的功能点,导致了Ui测试的不充分,那么会存在人多分工且时间充分的时候可以尝试接口去做业务流的全覆盖,否则不要轻易的去尝试。

45. 你们项目最佳的并发用户数是多少?

我们当时做到1500个并发用户的时候,查询功能的响应时间超过了性能指标2秒多,原因是有几个表的索引建得不合理导致的,我们当时做到1500并发用户后,就没再继续增加用户量了。

46. 如何判断网络是否存在瓶颈?

在性能测试结束之后,我们会根据性能测试的结果,查看在整个性能测试过程中,网络的吞吐量是多少,如果网络的吞吐量占到了服务器的70%以上,我们就认为网络存在瓶颈,通常会增加带宽或者压缩传输数据。

47. 如何判断响应时间不达标

响应时间不达标的话,我们会根据性能测试结果先检查看下是否是服务器带宽存在问题,如果带宽存在瓶颈,则会考虑增加带宽或者压缩传输数据,如果带宽没有问题的话,我们会从服务器上导出日志,开发一起讨论分析是哪个地方导致响应时间过长,确定问题后,就提单给开发修复,修复好了就进行回归测试。

48. 如何判断CPU使用率不达标

CPU使用率不达标,我们会从服务器上导出日志,分析是哪个地方导致CPU使用率不达标,如果分析不出来,就叫上开发一起讨论,确定问题后,就提单给开发修复,修复好了就进行回归测试。

49. App常见崩溃的原因?

  1. 设备碎片化:由于设备极具多样性,App在不同的设备上可能有不同表现形式。
  2. 宽带限制:宽带不佳的的网络对APP所需的快速响应时间不够。
  3. 网络的变化:不同网络间的切换可能会影响App的稳定性。
  4. 内存管理:可能内存过低,或非是授权的内存位置的使用可能会导致App失败。

50. 你在项目中最经典的BUG是什么?

  1. 兼容性问题,在ie浏览器,提交订单按钮可以点击,到了谷歌,火狐就不能了。
  2. 查询订单页面,根据条件筛选的结果不是想要的结果,还有某些字段的值没有显示出来,或者显示错误。(因为开发从库表取值有误)
  3. 付款成功后,订单状态一直不翻转为交易成功。(因为代码没有正确获取库表中付款成功记录的状态码)
  4. 修改支付密码,新密码和原密码一致,也通过了,系统没有做新旧密码的校验。
  5. 付款时候的手机验证码,可以一直使用,没有成功做有效期控制。
  6. 手机app断开网络后,再去点击,没有友好的错误页面提示网络已断开,只有undefined返回

51. 你在你工作中遇到最棘手的问题是什么?

  1. bug无法复现
  2. 查询功能,翻页后第二页的内容与第一页的内容完全相同。原因是翻页的时候刷新了页面触发了查询语句。印象最深的原因:发生过两次,才知道原因所在。

52.弱网情况下你是如何测试的?

  1. 2G的网速150kbps,折合下载速度15-20K/S.B=8b.g
  2. 3G的网速 1-6Mbps,折合下载速度120K/S-600K/S.
  3. 4G的网速10-100Mbps,折合下载速度1.5M/s-10M/s.
  4. 使用真实的SIM卡,运营上网络来进行测试。

53.跟开发人员因为BUG产生分歧你是如何解决的?

  1. 问题确认与评估
  2. 明确开发不修改该缺陷的确切原因
  3. 具体问题具体分析--注:dev代表开发 tester表示测试人员
  4. 发挥TM与PM的沟通职责 注TM表示测试经理 PM表示产品经理强调沟通。

54.如何提交高质量的软件缺陷记录(报告)?

  1. 通用UI要统一、准确。
  2. 尽量使用业界惯用的表达术语和表达方法
  3. 每条缺陷报告只包括一个缺陷
  4. 不可重现的缺陷也要报告
  5. 明确指明缺陷类型
  6. 明确指明缺陷严重等级和优先等级
  7. 描述 (Description) ,简洁、准确,完整,揭示缺陷实质,记录缺陷或缺陷出现的位置
  8. 短行之间使用自动数字序号,使用相同的字体、字号、行间距
    短行之间使用自动数字序号,使用相同的字体、字号、行间距,可以保证各条记录格式一致,做到规范专业。

55. 手机端测试的关注点有哪些?

UI测试,功能,性能测试,安装卸载测试,软件升级测试,登陆测试,安全性测试,消息推送,前后台切换,兼容性测试,网络环境测试,monkey测试。

  • 兼容性:
  1. 系统版本:android:原生安卓系统:4.4 5.8。定制版本:小米、华为、魅族..
    IOS:原生系统:5.0.。。
  2. 屏幕分辨率:7201280 19281888.,图片(根据分辨率做一些图片)
  3. 网络状态:2g 3g 4g 5g wifi

56. Web测试的方法有哪些?

image.png

57. 软件测试的分类有哪些?

image.png

58. 测试用例的方法有哪些以及包含的内容?

方法:等价类划分法、边界值分析法、场景法,因果图、错误推测法
解释:

  1. 等价类划分:把所有可能输入的数据分为若干个区域,然后从每个区域中取少量有代表性的数据进行测试即可,分为有效等价类和无效等价类。
  2. 边界值分析法:取稍高于或稍低于边界的一些数据进行测试,使用离点、上点、内点确定取值。
  3. 错误推测法:测试经验丰富的人喜欢使用的一种测试用例设计方法。
    一般这种方法是基于经验和直觉推测程序中可能发送的各种错误,有针对性地设计。只能作为一种补充。
  4. 因果图方法:比较适合输入条件比较多的情况,测试所有的输入条件的排列组合。所谓的原因就是输入,所谓的结果就是输出。
  5. 场景法:通过模拟业务场景来对系统的功能点或业务流程的描述,从而提高测试效果的黑盒测试方法

59. App的性能测试怎么做的?

App的性能分为服务器端的性能和手机端的性能。 服务器端的性能,我们用Jmeter工具进行测试的,和web的端性能测试方法一样的。我们是用monkey做手机端App的稳定性测试的,使用monkey跑10万次,看它会不会出问题,如果出了问题,我们再定位原因,具体的做法是这样的:在跑monkey前,先使用adb logcat -c清空手机的logcat日志接下来,使用adb logcat -v time获取logcat日志并导入本地文件使用monkey运行被测应用:adb shell monkey -p 包名 -v 10万次 并将执行结果导入到本地测试完成后查看monkey日志,如果说它跑的次数跟我设的次数不一样.就说明monkey中途跑失败了。那我就要去看看monkey日志中有没有crash或者anr的关键字,如果有还需定位到是什么原因导致的anr或者crash的问题。并且将相关日志和logcat日志与进程号提交给开发定位,如果是anr的问题,还需要从安卓中获取/data/anr/traces.txt文件提交给开发定位。

60. 代码的版本管理用什么工具,上传和合并代码?SVN介绍用的版本管理工具

SVN是Subversion的简称,是一个开放源代码的版本控制系统,说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的
SVN需要部署服务端和客户端,我们公司服务端部署在服务器上,我们只需要在自己的电脑上安装客户端(小乌龟),服务端给分配好账号密码和权限,并且给我们仓库的地址,我们就可以对仓库中的文件或代码进行checkout update commit等操作,当然共同协作开发可能还会有冲突发生,这就需要处理冲突
当然除了SVN我会使用GIT, Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 是一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
在使用GIT都是使用指令进行操作:

  • 配置用户信息 用户名和邮箱
git config --global user.name "DashShi"
git config --global user.email 805256908@qq.com
  • 创建版本库 git init进行仓库的初始化
  • 添加文件到版本库(其实是到版本库的缓存)
git add . 把这个文件夹下面所有的文件都添加到库
git add abc.txt 把某一个文件添加到库中
git status -s 可以查看添加的状态
  • 提交添加到缓存的文件到真实的仓库git commit -m "提交的信息说明"
  • 查看提交的日志/记录
git log
git log --pretty=oneline 简略信息查看日志
  • git的远程仓库
//远程仓库存在,把本地的代码推送到远程需要执行
git push -u origin master
  • 如果想把github远程仓库的代码拿到本地
git clone "url"

61. APP出现ANR的原因?

线程阻塞的,内存不足,CPU满负荷(由于现在的手机基本都是8核CPU,所以基本不会出现CPU满负荷的情况)。

62. APP出现CRASH的原因:

  1. 空值指针
  2. 数组越界
  3. 内存不足
  4. CPU满负荷(由于现在的手机基本都是8核CPU,所以基本不会出现CPU满负荷的情况)

63. Appium的工作原理是什么?

我们的电脑(c端)上运行自动化测试脚本,调用的是appium的webdriver的接口,appium服务器(s端)接收到我们client上发送过来的命令后,他会将这些命令转换为UIautomator认识的命令,然后由UIautomator来在设备上执行自动化。

64. MySql数据库查询语言有哪些?多表联查会吗?什么是子查询?

  • 数据库语言最常SQL (结构化查询语du言)

    创建表:create table user(id int(11) primary key auto_increment,name   varchar(20),age int(4),sex varchar(10),);
    增:insert into user(name,age,sex) values(?,?,?);
    删:delete from user where name=?;
    改:update user set age=?,sex=? where name=?;
    查询所有:select * from user;   
    根据名称查找:select * from user where name=?;
    
  • 多表联查:

    select * from customer,orders;
    select * from customer,orders where customer.id=orders.customer_id;
    select * from customer c left join orders o on c.id=o.customer_id;
    select * from customer c right join orders o on c.id=o.customer_id;
    
  • 子查询:老师和学生

    //查询李老师所教的学生
    select id from teacher where name=’李老师’
    select student_id from teacher_student where teacher_id=id
    
    select * from student where id in(select student_id from teacher_student where teacher_id =(select id from teacher where name='李老师'));
    
    //查询张三的所有老师
    select * from teacher where id in(select teacher_id from teacher_student where student_id=(select id from student where name='张三'));
    

65. SQL语句处理与代码处理哪个好,举例?

如果用sql语句,数据处理比较快,处理后传输的数据量稍大,由123变成了汉字。
在代码中处理,传输的数据量小点,处理速度取决于代码怎么处理。
如果数据量不大,两种方法区别不明显,建议用sql语句。

66. SQL内关联和外关联的区别?

内关联是求交集
外观连是以主表为标准,去附表找需要的信息

67. Linux系统TOP命令介绍?

显示,管理执行中的程序 就是任务管理器

68.liunx磁盘满了,怎么处理?

#ls –bailR /home >;files.txt
#diff filesold.txt files.txt

69.Linux系统操作的指令说一下:增加,删除,复制,移动等问题?

目录操作
        cd usr/                            切换到该目录下usr目录
        cd ..                              切换到上一层目录
        cd /                               切换到系统根目录
        mkdir 目录名称                      创建目录
        ls       目录名称                   查询该目录下所有的目录和文件
        ls [-a]  目录名称                   查询该目录下所有的目录和文件,包含隐藏文件
        ls [-l]   目录名称                  查询该目录下所有的目录和文件的详细信息
        find / -name 目录名称               查找/root下的目录(文件)
        mv 目录名称 新目录名称                 修改目录名称
        mv 目录名称 目录的新位置               剪切
        cp -r 目录名称 目录的目标位置          拷贝
        rm -rf  目录                        强制删除目录

文件操作
        touch 文件名称                      创建空文件
        cat/more/less/tail 文件            查看文件内容
        tail -f 文件                       动态查看/实时查看文件(日志)
        grep 要搜索的字符串 要搜索的文件       关键字搜索
        vi/vim  文件                       修改文件内容
        rm -rf 文件                        强制删除文件
文件的打包
        tar -zcvf 文件名.tar               要打包的文件

文件的解压   
        tar -xvf 文件名.tar

扩充:将文件解压到固定位置
        tar -xvf 文件名.tar -C 指定解压的位置

查询当前所在位置
        pwd      

查看进程
        ps -ef | grep 进程名称(tomcat/mysql)

杀死进程
        kill -9 进程pid

查看端口号
        netstat -an | grep 端口号(3306)
查看服务器ip
        ifconfig

查看网络是否能正常使用
        ping 外网地址                     查看是否能访问外网
        ping 内网ip                       查看是否能访问内网

权限命令
        chmod 777 文件        赋权

查看cpu
        top

查看磁盘信息
        df -h

查看内存信息
        free    

关机命令
        shutdown -h now          立刻关机,其中now相当于时间为0的状态
        shutdown -h 10:23
        shutdown -h +10          系统再过十分钟后自动关机

重新启动
        reboot                    重新启动操作系统

70.Linux系统日志查看指令,压缩,解压指令等问题?

Tar -n logcat 查看系统日志
tar -zcvf 文件名:压缩
tar -xvf 文件名 :解压

71. Linux上能不能直接进行性能测试?

不能,脚本需要通过windows调试好后,才能在Linux上运行,运行的时候,只能通过non GUL形式进行启动jmeter,但需要注意的是,csv文件在windows上与LInux上要统一路径,最好使用相对路径,放到统一目录下边。

72.说几个常用的adb指令?

Adb install(apk的文件路径) 安装软件到手机或者模拟器
Adb uninstall(包名) 卸载手机或模拟器上的某款软件
Adb devices 查看与当前电脑连接的移动设备
Abd adb start-server 启动
Adb adb kill-server 杀死
Adb logcat 查看日志
Adb logcat -v time process > 

73.软件负盖安装的adb命令?

adb install -r xx.apk覆盖低版本的
adb install -r -d  覆盖高版本的

74.性能测试的Adb命令?

adb shell dumpsys cpuinfo  查看手机cpu的使用情况
adb shell getprop|findstr dalvik   手机系统自己运行的内存使用

75.说几个Monkey指令?

adb shell monkey -p 包名
adb-shell--ignore-crashes 忽略崩溃
adb-shell--ignore-timeouts 忽略延时
adb-shell--ignore-throttle 延时毫秒值
adb-shell--pct-touch--pct-motion 触摸与滑动事件的比例

adb shell monkey -p com.example.login --ignore-crashes --ignore-timeouts --throttle 100 --pct-touch 50 --pct-motion 50 -v -v 1000 >c:\login\c.txt

76. Postman与jmeter的区别是什么?

  1. 用例组织不同,jmeter的组织是比较扁平,首先他没有工作空间的概念,直接就是测试计划,而postman功能上更简单,组织方式是轻量级,他主要针对的是单个的http请求。
  2. 支持接口的类型与测试的类型不同:jmeter的功能更强大,可以通过各种类型的接口,不支持的也可以通过网上或者自己编写的插件进行扩展,而postman更轻量级,定位不同,可用来测试Rest接口。
  3. 配置不同:jmeter可以在线程组里添加http,tcp,而postman只支持Rest接口。

77. Postman做哪些操作?

Postman是一款功能超级强大的用于发送 HTTP 请求的 Chrome插件 。做web页面开发和测试的人员应该是无人不晓无人不用!其主要特点 特点是可以创建和发送任何的HTTP请求。

78. 浏览器的兼容性测试是怎么测试的?

大型的、用户群体多的网站都需要做浏览器兼容性测试,需要测试主流的浏览器(除特定要求的浏览器以外)
测试的内容:一般是页面的排版,页面格式,字体,颜色,下拉菜单,复选框等测试(UI:CSS,HML,Js在不同浏览器下的表现)
再就是对功能进行检查

为什么选择这几个浏览器?

原因:以浏览器内核分类浏览器进行测试

常见浏览器及四大内核:

IE、360(兼容模式)、搜狗(兼容模式)(Trident内核)

Firefox(Gecko内核)

Chrome、360(极速模式)、搜狗(极速模式)(Blink内核)

Apple Safari(WebKit内核)

79. 最近工作功能测试流程?意思是问测过哪些功能?

  • 测试流程:
    A. 待测应用在不同的操作系统平台上正常运行,包括待测试项目能在同一操作系统平台的不同版本上正常运行;
    B. 待测应用能与相关的其他软件或系统“协调工作”;
  • 测过哪些功能:
    A. 兼容性测试就是测试电脑硬件之间是否有不兼容等问题或软件问题。
    B. 兼容性测试侧重哪些方面
  1. 向前兼容和向后兼容。向前兼容是指可以使用软件的未来版本,向后兼容是指可以使用软件的以前版本。
  2. 不同版本之间的兼容。实现测试平台和应用软件多个版本之间能够正常工作。

80. 测试手机兼容性测试是如何测试的?

一般测试手机兼容性的时候会考虑到手机的型号,分辨率以及安卓版本号,一般常用的手机型号如:华为,锤子,小米,魅族等,一般碎片化会严重,从Android6.0到Android10.0的版本是不一样的,而最近的版本号已经到10了,也就是AndroidQ,它是协助开发者利用5G,折叠屏,无框屏,设备内置Al等最新技术继续创新,同时确保用户安全,隐私及数字健康。向分辨率这块大部分是1920*1080,一般会买真机去测。。

81. 如何理解压力、负载、性能测试测试?

性能测试是一个较大的范围,实际上性能测试本身包含了性能、强度、压力、负载等多方面的测试内容。
压力测试是对服务器的稳定性以及负载能力等方面的测试,是一种很平常的测试。增大访问系统的用户数量、或者几个用户进行大数据量操作都是压力测试。
负载测试是压力相对较大的测试,主要是测试系统在一种或者集中极限条件下的相应能力,是性能测试的重要部分。
100个用户对系统进行连续半个小时的访问可以看作压力测试,那么连续访问8个小时就可以认为负载测试,1000个用户连续访问系统1个小时也可以看作是负载测试。
实际上压力测试和负载测试没有明显的区分。测试人员应该站在关注整体性能的高度上来对系统进行测试。

82. shell写脚本

  1. 语法
  2. 执行

83. selenium和appium使用

84. Charles和Fiddler如何移动端抓包

86. bug流转过程

image.png

87. Charles功能操作,需要实操

网络抓包
移动端抓包
证书安装
断点
过滤
模拟慢速网络
修改网络请求
压测服务器
模拟404、403

88. pytest+allure如何生成报告?

89. requests使用

90. TCP与UDP的区别,七层网络模型

91. 性能测试怎么做的?

做性能需求分析,挑选了用户使用最频繁的功能来做性能测试,比如:登陆,打开系统首页,搜索,提交订单,确定性能指标,比如:事务通过率为100%,90%的事务响应时间不超过3秒,CPU和内存的使用率为70%以下。

搭建性能测试环境,准备好性能测试数据。

使用Jmeter开发优化脚本,包括:参数化,断言,关联等。

设计性能测试场景,我们这个项目做了单用户单功能循环200次的基准测试,然后使用1500个用户,执行30分钟的负载测试,看系统有没有性能瓶颈;

我们搭建了分布式压力测试环境进行测试,每台压力机并发500个用户,并监控linux服务器的CPU,内存,IO。

分析性能测试结果,如果有性能瓶颈,收集相关的日志提单给开发修改。

开发修改好后,回归性能测试,然后输出性能测试报告。

92. Cookie和Session的区别与联系

  1. Cookie是存放在浏览器的,Session是存放在服务器;
  2. Cookie不是很安全,涉及用户隐私方面尽量放在Session;
  3. 当访问量大的时候,Session会占用服务器资源
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容