Monkey

monkey测试

醉酒当歌 提交于 2020-11-29 04:56:39
一 monkey测试简介 monkey就是SDK中附带的一个命令行工具,模拟器/真实设备【尽量用真实设备】。发送伪随机的用户【如按键输入,触摸屏输入,手势输入等】,实现压力测试。 作用:提过APP稳定性,健壮性 运行平台:Android 二 monkey工具使用 monkey使用前提条件: 1.配置Android SDK,jdk环境变量 2.连接手机--进入开发者模式--打开USB调试 验证是否成功:打开cmd--输入命令【adb devices】 monkey基本组成 monkey选项主要分为四大类: 1.基本配置选项,如设置尝试的事件数量【一般下班前测试,第二天早上看日志分析】 2.运行约束选项,如设置只对单独的一个包进行测试 3.事件类型和频率 4.调试选项 基本命令组成 adb shell monkey -p 程序包 -v 测试次数 注: 1.-v最多显示3个,-v就是日志显示格式。 2.其中程序包名称通过 adb shell pm list packages -3 显示所有第三方APP程序包 3.执行mokey测试前,先看下有哪些参数,执行命令【adb shell monkey】 4.执行monkey测试 这里测试是医咖大夫APP 打开cmd-输入命令【adb monkey -p cn.medsci.yun.doctor -v 次数】,如下图所示 monkey

一言难尽,Jpa这个功能差点让我丢了工作

北城以北 提交于 2020-11-29 03:30:33
故事背景 前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸。 故事细节 在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了,相信大家都有所了解或者也用过。 在 jpa 中有一个配置项,可以让程序在启动的时候自动初始化表结构或者更新表结构的功能。听上去很不错,非常实用。 其实这是一个非常危险的功能,个人觉得不应该提供这种功能,只要留了口子就有可能会出问题。 这个配置就是: spring.jpa.hibernate.ddl-auto create( 危险系数 2 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。 create-drop( 危险系数 3 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。 程序停止的时候会将数据库中所有表删除掉。 update( 危险系数 1 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会判断有没有新增字段或者修改长度之类的,如果有则会更新表结构,不会影响数据。 validate( 危险系数 0 颗星 ) validate 不会更新和删除表或者数据

android monkey压力测试(二)

假如想象 提交于 2020-11-15 18:17:10
一、什么是Monkey 顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲 通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。 二、Monkey简介 monkey官方文档 (需要翻墙) monkey源码 monkey程序由Android系统自带,使用java语言写成,在Android文件系统中存放路径:/system/framework/monkey.jar; monkey.jar程序由一个名为“monkey”等shell脚本来启动执行,shell脚本在Android文件系统中的存放路径:/system/bin/monkey; 因为monkey测试是一种为了测试软件的稳定性、健壮性(是否会发生闪退、崩溃和无响应问题)的快速有效方法 基本语法 $adb shell monkey [option] <event-count> 如果不指定options,即类似于使用adb shell monkey 1000,那么将会对整个系统中安装的package发送事件流,换种说法就是对整个Android系统进行monkey压力测试 这是一个对指定应用(Android自带的系统设置应用)进行monkey测试的栗子,发送的事件流数量为1000:

Django 学习笔记之使用旧数据库

余生长醉 提交于 2020-11-02 19:09:15
题图:by fahmyrhamadan from Instagram 如果你按照顺序,从第一篇文章读到本文。恭喜你,你已经将 Django 大部分基础知识掌握了。后续的文章是在之前的基础上添砖加瓦或常用的应用。本文将的内容是一个场景应用,新项目使用旧数据库。 可能以前项目是使用其他语言,如 Java 或 PHP 开发的,后面迁移到 Python 上。虽然应用程序改变了,但是数据缺不是丢弃。因此,存在这样的问题。那就是使用 Django 开发的 Web 应用程序如何使用旧的数据库? 我就使用旧的 SqLite 数据库作为例子进行讲解,MySQL 等其他数据库也是操作类似。 1 导入数据库 旧的数据库名为 MyDataBase.db,我将其导入到新项目的 db 目录。 然后将 settings.py 文件中的数据库名称修改下。 DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.sqlite3' , # 系统自动生成 # 'NAME' : os.path. join (BASE_DIR, 'db.sqlite3' ), 'NAME' : os.path. join (BASE_DIR, './db/MyDataBase.db' ), } } 2 创建模型 我们知道 Models 层是跟数据库打交道的层次

HBase/TiDB都在用的数据结构:LSM Tree,不得了解一下?

夙愿已清 提交于 2020-10-29 17:18:23
LSM Tree(Log-structured merge-tree)广泛应用在HBase,TiDB等诸多数据库和存储引擎上,我们先来看一下它的一些应用: 参考资料【4】 这么牛X的名单,你不想了解下LSM Tree吗?装X之前,我们先来了解一些基本概念。 设计数据存储系统可能需要考虑的一些问题有:ACID,RUM(Read,Write,Memory)。 ACID ACID 相信小伙伴都被面试官问过,我想简单讨论的一点是:如何 持久化数据 才能保证数据写入的 事务性 和 读写性能? 事务性可简单理解为:1.数据必须持久化。2.一次数据的写入返回给用户 写入成功就一定成功,失败就一定失败。 读写性能可简单理解为:一次读 或 一次写 需要的IO次数,因为访问速率:CPU>>内存>>SSD/磁盘。 对于单机存储,最简单的方式当然是:写一条就持久化一条,读一条就遍历一遍所有数据,然后返回。当然没人这么干,在内存中我们都还知道用个HashMap呢。 拿Mysql InnoDB举例子: 读性能体现在数据的索引在磁盘上主要用B+树来保证。 写性能体现在运用 WAL机制 来避免每次写都去更新B+树上的全量索引和数据内容,而是通过redo log记录下来每次写的增量内容,顺序将redo log写入磁盘。同时在内存中记录下来本次写入应该在B+树上更新的脏页数据,然后在一定条件下触发脏页的刷盘。

Redis学习之Jedis源码原理分析探究(BIO手写Jedis客户端)

烂漫一生 提交于 2020-10-28 04:26:07
  在Redis的使用过程中,大多数人都是使用现成的客户端,如Jedis,Redisson,Lettuce。因此本文研究用BIO的方式手写Redis客户端尝试,对遇到的问题进行探究及总结。   如何从架构角度思考架构分层?   Redis通讯协议RESP是怎么回事?   如何基于BIO实现Redis客户端?   Redis客户端通讯线程安全问题如何解决? 一、Jedis客户端如何进行架构分层   要进行远程访问,如下图所示:                我们在Java应用程序的客户端通过访问包装的API进行Redis访问,API使我们直接可以看懂的调用入口; 然后API是对Redis通信协议的包装,通过对协议的包装,实现我们对Redis访问协议的透明使用; 协议是按照一定规则组装的数据,并不能直接用于网络IO,所以必须进行序列化和反序列化,这样才能进行远程Redis的请求调用以及返回数据的处理。 二、传输层通信   基于远程访问,我们可以使用BIO的Socket进行通信,首先定义一个Connection,Connection类包含了建立BIO连接的远程地址host,端口port,套接字Socket以及输入输出流。   此类一个Connection的构造方法,一个Connection的初始化方法,以及请求发送方法。 public class Connection { private

java第七天 继承 接口

风格不统一 提交于 2020-10-25 03:52:50
继承和接口的区别 java继承是单继承,实现接口可以看做是对继承的一种补充。 实现接口可在不打破继承关系的前提下,对某个类功能扩展,非常灵活。 实例: interface Fish { //该方法实现了.... public void swimming(); } class Monkey { int name ; public void jump() { System. out .println( "猴子会跳" ); } } class LittleMonkey extends Monkey implements Fish { @Override public void swimming() { // TODO Auto-generated method stub } } 实例: public class Test1 { public static void main (String args[]) { CarShop carshop = new CarShop(); carshop.sellCar( new BMW()); carshop.sellCar( new QQ()); System. out .println( "总收入" +carshop.getMoney()); } } interface Car { //汽车名字 String getName(); //汽车价格

Redis学习之Jedis源码原理分析探究(BIO手写Jedis客户端)

心不动则不痛 提交于 2020-10-24 10:04:50
  在Redis的使用过程中,大多数人都是使用现成的客户端,如Jedis,Redisson,Lettuce。因此本文研究用BIO的方式手写Redis客户端尝试,对遇到的问题进行探究及总结。   如何从架构角度思考架构分层?   Redis通讯协议RESP是怎么回事?   如何基于BIO实现Redis客户端?   Redis客户端通讯线程安全问题如何解决? 一、Jedis客户端如何进行架构分层   要进行远程访问,如下图所示:                我们在Java应用程序的客户端通过访问包装的API进行Redis访问,API使我们直接可以看懂的调用入口; 然后API是对Redis通信协议的包装,通过对协议的包装,实现我们对Redis访问协议的透明使用; 协议是按照一定规则组装的数据,并不能直接用于网络IO,所以必须进行序列化和反序列化,这样才能进行远程Redis的请求调用以及返回数据的处理。 二、传输层通信   基于远程访问,我们可以使用BIO的Socket进行通信,首先定义一个Connection,Connection类包含了建立BIO连接的远程地址host,端口port,套接字Socket以及输入输出流。   此类一个Connection的构造方法,一个Connection的初始化方法,以及请求发送方法。 public class Connection { private

高级软件测试工程师必备知识与技能

可紊 提交于 2020-10-23 11:54:42
高级软件测试工程师应该具备哪些技能和知识,川石哥带你了解相关技能与知识。 Linux环境搭建及命令 1.虚拟机的搭建与使用 搭建虚拟机的操作步骤 搭建虚拟机系统环境 虚拟机的基本操作与使用 2.Linux系统安装,搭建测试环境 使用虚拟机,安装Linux系统 熟悉Linux系统,了解基本操作 Linux系统下搭建测试环境 3.Linux的基本语法和命令 熟悉Linux执行环境,以及常用命令 Linux相关拓展 4.Linux环境下搭建测试环境 Linux环境下安装数据库 Linux环境下安装jmeter Linux环境下安装缺陷管理工具 接口测试工具 接口测试神器,你绕不开的强大工具:Jmeter。小巧灵活:Postman Jmeter接口测试入门:Jmeter简介,环境准备,目录结构介绍,如何录制脚本,以及基础组件的使用,线程、作用域、HTTP请求、定时器、断言等等 Jmeter接口测试进阶使用:Jmeter逻辑控制、前置处理器、后置处理器、监视器、结果树,如何参数化、正则表达式关联、事务、检查点等等。并带领大家对带有token等动态数据的项目进行实战演练 Jmeter接口测试高级功能:Jmeter脚本思考时间、随机时间、线程启动间隔、并发集合点、联机远程调用,webservice、websocket、jdbc、命令调用等等 Postman接口测试工具使用:行业标准HTTP

2020-10-20

一世执手 提交于 2020-10-22 14:08:14
人工智能2020秋季 杂谈 : 机器学习比较难,所以我跑到人工智能这里来避避风头 第一关:知识的表示 1. 一阶谓词逻辑 杂谈 :谓词逻辑,关键是谓词,其实我觉得就是汉语转化为“英语” 先上菜鸟题: 老王喜欢妹子 并不是所有的男人都喜欢妹子 有些男人不是老王 再上经典的猴子吃香蕉的题: 设房间里有一只猴子,位于a 在c处有一串香蕉,(猴子想吃,但摘不到) 房间b处有一个箱子(如果猴子站到箱子上,就可以摘到香蕉) ​ 解析:要解决这个问题,需要一定的套路。首先,找到有哪些东西(猴子,香蕉,箱子);其次,定义谓词 ​ 静态属性: ​ 位置关系:AT(x,y) ,其中x的个体域为{monkey,banana,box},y的个体域为{a,b,c} ​ (如果以后涉及到位移的问题,首先应该想到的就是位置关系) ​ ONBOX:表示猴子在箱子上面 ​ HB:猴子摘到香蕉 ​ 从上面就可以找到问题的初始状态和目标状态: ​ AT(monkey,a) AT(monkey,c) ​ AT(box,b) AT(box,c) ​ AT(banana,c) AT(banana,c) ​ ~ONBOX ONBOX ​ ~HB HB ​ 动态属性:动作 ​ GOTO(x,y):表示猴子从x处走到y处 ​ PUSHBOX(x,y):表示猴子推着箱子从x处移动到y处 ​ CLIMBBOX:表示猴子爬上箱子 ​