目录
[1].测试的相关概念
[2].单元测试(掌握)
[3].日志猫的使用
[4].login登录案例
[5].使用上下文获取常见目录
[6].登录数据存储到sd卡(掌握)
[7].获取sd卡可用空间(掌握)
[8].文件权限的介绍
[9].SharedPreferences介绍(掌握)
[10].xml的序列化(掌握)
[11].xml的解析(掌握)
1.测试的相关概念
好的软件不是开发出来的,是不断测试出来的
安卓的压力测试:
打开模拟器
进入终端
adb shell //进入手机终端
monkey //查看monkey指令
monkey 2000 //对手机终端里的每个应用都狂点2000次
1.1根据是否知道源代码分 黑盒 测试 和 白盒 测试
黑盒:不知道源代码,只针对功能测试
白盒:知道源代码,自己写测试代码测试
1.2根据测试的粒度
方法测试:针对代码中的某一方法进行测试
单元测试:
集成测试:客户端和服务器联调进行测试
系统测试:对整体的系统进行测试
1.3根据测试的暴力程度
压力测试:重复点击N次、N个用户集中访问
冒烟测试:压力测试的一种,一直测试到设备冒烟
2.单元测试
[1]在清单文件中进行如下配置
在application中配置测试的函数库:
<uses-library android:name="android.test.runner"/>
在与application同级处配置测试设备的主类和目标包:
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="包名" />
[2]定义一个class写一个方法:
//定义一个计算器相加的方法*/
public int add(int x,int y) {
return x+y;
}
[3]定义一个类继承自AndroidTestCase的类
//写测试方法
public void testAdd() {
Calc calc = new Calc();
int result = calc.add(7, 2);
//断言 (期望的正确值,实际的结果值)
assertEquals(8, result);
}
[4]右键testAdd方法 Run As到Android JUnit Test
3.日志猫LogCat的使用
Logcat有五个级别;tag是个标识,一般使用类名,方便找到打印信息
Log.v(tag, "我是verbose级别日志");//蓝色
Log.i(tag, "我是info级别日志"); //绿色
Log.d(tag, "我是debug级别日志");//黑色
Log.w(tag, "我是warn级别日志");//黄色
Log.e(tag, "我是error级别日志");//红色
可以在添加日志过滤器找到自己需要的日志内容;一般红色代表错误,黄色代表警告;这两个就可以调试出错误
4.login登录案例
复选框
保存用户名和密码到本地
从本地读取用户名和密码
5.使用Context上下文获取常见目录
//上下文
Context context
//会在data/data/应用的包内生成一个file文件夹
String path = context.getFilesDir().getPath();
//在file文件夹下创建一个info.txt文件
File file = new File(path,"info.txt");
上下文调用的实际参数:MainActivity.this
利用上下文可以获取很多的方法,
context.getFilesDir()创建一个file文件夹
context.getResources()拿到资源目录下的资源文件
6.登录数据存储到sd卡
往sd卡中写数据需要配置权限:android.permission.WRITE_EXTERNAL_STORAGE
String sdPath = Environment.getExternalStorageDirectory().getPath();//获取sdcard的路径
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {//把数据保存到sd卡,需要先判断sd卡是否可用--可用
}
7.获取sd卡可用空间
//获取sd卡的 总空间和可用空间
File file = Environment.getExternalStorageDirectory();
long totalSpace = file.getTotalSpace(); //总空间:字节
long usableSpace = file.getUsableSpace(); //可用空间:字节
//空间大小转换为MB
String totalStr = Formatter.formatFileSize(this, totalSpace);
String usableString = Formatter.formatFileSize(this, usableSpace);
8.文件权限的介绍
在Linex下用十位表示文件的权限,安卓继承了这点,如果转成二进制,有权限用1表示、-用0表示
d rwx rwx rwx
第1位:表示文件的类型(d代表目录、-代表文件)
第2-4位:表示当前用户(r可读、w可写、x可执行、-没有权限),每一位都用二进制表示,即000-111,十进制为0-7
第5-7位:表示当前用户所在的组(r可读、w可写、x可执行、-没有权限),每一位都用二进制表示,即000-111,十进制为0-7
第8-10位:表示其他用户(r可读、w可写、x可执行、-没有权限),每一位都用二进制表示,即000-111,十进制为0-7
-rw-rw--w-:这是一个文件、对当前用户可读写不可执行、对当前用户所在的组可读写不可执行、对其他用户可写不可读不可执行
在终端中,可以用chmod指令修改文件权限,方法为:
adb shell //进入手机终端
cd data/data/应用包名/files //进入file文件夹下
chmod 777 private.txt //将private.txt文件权限修改为777(111 111 111)(每一段用一个十进制)
chmod 660 private.tex //即 110 110 000,表示当前用户可读写、当前用户所在的组可读写、其他用户无任何权限
//创建文件
try {
//创建文件输出流:文件名、文件权限类型(MODE_PRIVATE私有文件、MODE_APPEND可追加文件、MODE_WORLD_READABLE可读文件、MODE_WORLD_WRITEABLE可读写文件)
FileOutputStream fos = openFileOutput("private.txt", MODE_PRIVATE);
//在文件中写入数据
fos.write("111111111".getBytes());
fos.close();//关闭流
} catch (Exception e) {
e.printStackTrace();
}
//读取其他应用(com.biyu6.fileauthority)的本地文件
File file = new File("/data/data/com.biyu6.fileauthority/files/write.txt");
FileInputStream fis = new FileInputStream(file);
BufferedReader bufr = new BufferedReader(new InputStreamReader(fis));
String content = bufr.readLine();
System.out.println("读取的内容:"+content);
9.SharedPreferences介绍(偏好设置)
/**将用户名和密码保存到偏好设置中(SharedPreferences)
name 会生成一个xml文件
ode 四种模式(0私有、可读、可写...)*/
SharedPreferences sp = getSharedPreferences("config", 0);
//获取偏好设置的编辑器
SharedPreferences.Editor edit = sp.edit();
//存数据:int long bool string
edit.putString("name", nameStr);
edit.putString("pwd", passwordStr);
//点击提交编辑器
edit.commit();
//根据key找值,找不到返回一个默认值
String name = sp.getString("name", "");
String pwd = sp.getString("pwd", "");
//赋值给控件
et_name.setText(name);
et_password.setText(pwd);
10.xml的序列化(自己生成一个xml文件)
[1]通过StringBuffer 拼接字符串的方式自己组拼,最后将字符串存入一个自己定义的文件中(.xml)(不推荐)
[2]通过XmlSerializer类生成xml文件
1.获取XmlSerializer实例
获取XmlSerializer serializer = Xml.newSerializer();
2.设置XmlSerializer序列化器参数
File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup2.xml");
FileOutputStream fos = new FileOutputStream(file);
serializer.setOutput(fos,"utf-8");
3.写文档开头
serializer.startDocument("utf-8", true);//文档的编码格式
serializer.endDocument();//写文档的结尾(写一个开头就写一个结尾,不会出错)
4.写节点(根节点、节点)
serializer.startTag(null, "smss");//smss开始
serializer.endTag(null, "smss");//smss结尾
5.关闭流
fos.close();
11.xml的解析
xml的数据来源于后台返回的数据,前台只需要解析数据
后台是以流的形式返回的数据
解析步骤:
1.获取XmlPullParser
XmlPullParser parser = Xml.newPullParser();
2.设置XmlPullParser的参数
parser.setInput(inps,"utf-8");
3.获取解析文档的事件类型
int type = parser.getEventType();
4.具体判断解析的是哪个标签
XmlPullParser.START_TAG://解析到了开始标签
解析各节点
XmlPullParser.END_TAG://解析到了结束标签