ZXing
官网:https://github.com/yipianfengye/android-zxingLibrary
依赖: implementation ‘cn.yipianfengye.android:zxing-library:2.2’
权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn1).setOnClickListener(this);
findViewById(R.id.btn2).setOnClickListener(this);
imageView = findViewById(R.id.img);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn1:
Bitmap bitmap = CodeUtils.createImage("呵呵", 200, 200, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
imageView.setImageBitmap(bitmap);
break;
case R.id.btn2:
Intent intent = new Intent(this, CaptureActivity.class);
startActivityForResult(intent,1001);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1001 && resultCode == Activity.RESULT_OK){
String stringExtra = data.getStringExtra(CodeUtils.RESULT_STRING);
Toast.makeText(this, stringExtra, Toast.LENGTH_SHORT).show();
Log.e("####",stringExtra);
}
}
}
Leaks
检测内存泄漏
debugImplementation "com.squareup.leakcanary:leakcanary-android:1.5.4"
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:1.5.4"
testImplementation "com.squareup.leakcanary:leakcanary-android-no-op:1.5.4"
-
测试分类:
白盒测试:是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。
黑盒测试:又被称为功能测试、数据驱动测试或基于规格说明的测试,是通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。 -
测试流程
(1).公司项目立项,测试工程师参加项目立项
(2).根据项目模块以及功能,指定具体详细的测试用例
(3).在程序开发人员提交测试后,测试人员(功能测试)测试软件功能界面的完整度;
(4). 如出现bug,使用bug服务器指向开发人员解决,在进行复测;
(5).所有bug解除后,开发人员进行打包适配;
(6).测试以及UI人员根据各个机型所安装软件运行效果进行测试,配合开发做兼容适配;
(7).兼容完成后产品人员根据不同的应用市场提交不同的渠道包。 -
Android常用测试工具:
Junit使用:
@Before:测试方法每次执行Test方法之前都会执行的方法注解
@Test:测试方法体注解
@After:测试方法每次执行完一个Test方法后都会执行的方法
monkey测试:
Monkey 是什么?
Monkey 就是SDK中附带的一个工具。Monkey 测试的目的? :该工具用于进行压力测试。 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出现的问题。Monkey 测试的特点? Monkey 测试,所有的事件都是随机产生的,不带任何人的主观性。
Monkey常用命令:
标准的monkey 命令 [adb shell] monkey [options] , 例如: adb shell monkey -v ,adb shell monkey –p package–v 500,产生500次随机事件,作用在系统中所有activity(其实也不是所有的activity,而是包含Intent.CATEGORY_LAUNCHER 或Intent.CATEGORY_MONKEY 的activity)。 上面只是一个简单的例子,实际情况中通常会有很多的options 选项 2).四大类—— 常用选项 、 事件选项 、 约束选项 、 调试选项
- Android云测试:
百度云测试
Leaks检测内存泄漏
在Application中添加:
LeakCanary.install(this);
参考博客:
https://blog.youkuaiyun.com/fancy_xty/article/details/51595313
内存泄漏简介
https://blog.youkuaiyun.com/daiwenbin/article/details/19160171