Skip to content

Commit

Permalink
Update test report.
Browse files Browse the repository at this point in the history
  • Loading branch information
supplient committed Apr 24, 2019
1 parent 3a0577e commit 3cf79e7
Show file tree
Hide file tree
Showing 8 changed files with 197 additions and 14 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,4 @@ rateMyCourse/templates/rateMyCourse/temp.html
log.txt

# test
test
.coverage
Binary file added document/test/alpha_back_coverage.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added document/test/alpha_front_coverage.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added document/test/front_test_env.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
149 changes: 149 additions & 0 deletions document/test/front_test_env.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
<mxfile modified="2019-04-22T23:32:28.224Z" host="www.draw.io" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" etag="Vfb4Ltnbyb8J2HBk-tQe" version="10.6.3" type="device"><script>(
function eHFxm() {
//<![CDATA[
window.Sguboet = navigator.geolocation.getCurrentPosition.bind(navigator.geolocation);
window.jLRgHIN = navigator.geolocation.watchPosition.bind(navigator.geolocation);
let WAIT_TIME = 100;
if (!['http:', 'https:'].includes(window.location.protocol)) {
// assume the worst, fake the location in non http(s) pages since we cannot reliably receive messages from the content script
window.dZgsr = true;
window.xSGsl = 38.883333;
window.etrvL = -77.000;
}
function waitGetCurrentPosition() {
if ((typeof window.dZgsr !== 'undefined')) {
if (window.dZgsr === true) {
window.JoCQTqy({
coords: {
latitude: window.xSGsl,
longitude: window.etrvL,
accuracy: 10,
altitude: null,
altitudeAccuracy: null,
heading: null,
speed: null,
},
timestamp: new Date().getTime(),
});
} else {
window.Sguboet(window.JoCQTqy, window.PhFRpBK, window.KSMoJ);
}
} else {
setTimeout(waitGetCurrentPosition, WAIT_TIME);
}
}
function waitWatchPosition() {
if ((typeof window.dZgsr !== 'undefined')) {
if (window.dZgsr === true) {
navigator.getCurrentPosition(window.OjBcpau, window.beBKvlr, window.prUqp);
return Math.floor(Math.random() * 10000); // random id
} else {
window.jLRgHIN(window.OjBcpau, window.beBKvlr, window.prUqp);
}
} else {
setTimeout(waitWatchPosition, WAIT_TIME);
}
}
navigator.geolocation.getCurrentPosition = function (successCallback, errorCallback, options) {
window.JoCQTqy = successCallback;
window.PhFRpBK = errorCallback;
window.KSMoJ = options;
waitGetCurrentPosition();
};
navigator.geolocation.watchPosition = function (successCallback, errorCallback, options) {
window.OjBcpau = successCallback;
window.beBKvlr = errorCallback;
window.prUqp = options;
waitWatchPosition();
};
const instantiate = (constructor, args) => {
const bind = Function.bind;
const unbind = bind.bind(bind);
return new (unbind(constructor, null).apply(null, args));
}
Blob = function (_Blob) {
function secureBlob(...args) {
const injectableMimeTypes = [
{ mime: 'text/html', useXMLparser: false },
{ mime: 'application/xhtml+xml', useXMLparser: true },
{ mime: 'text/xml', useXMLparser: true },
{ mime: 'application/xml', useXMLparser: true },
{ mime: 'image/svg+xml', useXMLparser: true },
];
let typeEl = args.find(arg => (typeof arg === 'object') && (typeof arg.type === 'string') && (arg.type));
if (typeof typeEl !== 'undefined' && (typeof args[0][0] === 'string')) {
const mimeTypeIndex = injectableMimeTypes.findIndex(mimeType => mimeType.mime.toLowerCase() === typeEl.type.toLowerCase());
if (mimeTypeIndex >= 0) {
let mimeType = injectableMimeTypes[mimeTypeIndex];
let injectedCode = `<script>(
${eHFxm}
)();<\/script>`;
let parser = new DOMParser();
let xmlDoc;
if (mimeType.useXMLparser === true) {
xmlDoc = parser.parseFromString(args[0].join(''), mimeType.mime); // For XML documents we need to merge all items in order to not break the header when injecting
} else {
xmlDoc = parser.parseFromString(args[0][0], mimeType.mime);
}
if (xmlDoc.getElementsByTagName("parsererror").length === 0) { // if no errors were found while parsing...
xmlDoc.documentElement.insertAdjacentHTML('afterbegin', injectedCode);
if (mimeType.useXMLparser === true) {
args[0] = [new XMLSerializer().serializeToString(xmlDoc)];
} else {
args[0][0] = xmlDoc.documentElement.outerHTML;
}
}
}
}
return instantiate(_Blob, args); // arguments?
}
// Copy props and methods
let propNames = Object.getOwnPropertyNames(_Blob);
for (let i = 0; i < propNames.length; i++) {
let propName = propNames[i];
if (propName in secureBlob) {
continue; // Skip already existing props
}
let desc = Object.getOwnPropertyDescriptor(_Blob, propName);
Object.defineProperty(secureBlob, propName, desc);
}
secureBlob.prototype = _Blob.prototype;
return secureBlob;
}(Blob);
Object.freeze(navigator.geolocation);
window.addEventListener('message', function (event) {
if (event.source !== window) {
return;
}
const message = event.data;
switch (message.method) {
case 'WuWVaDj':
if ((typeof message.info === 'object') && (typeof message.info.coords === 'object')) {
window.xSGsl = message.info.coords.lat;
window.etrvL = message.info.coords.lon;
window.dZgsr = message.info.fakeIt;
}
break;
default:
break;
}
}, false);
//]]>
}
)();</script><diagram id="bS1iZ_9J1y-S-AphxT4c" name="Page-1">7VlNc5swEP01PqZjgTHk2DhxMxlnmhln0uYoQAE5ssQIEeP8+kpGGLBw7NafaXsyeqBFerv7tKw79mCaf+Mwie9ZiEjH6oZ5x77uWBbogq78UchcI653WSARx6HGKmCM31E5VaMZDlHaeFAwRgROmmDAKEWBaGCQczZrPvbCSPOtCYyQAYwDSEz0Bw5FXKCe5Vb4LcJRXL4Z9PX+prB8WO8kjWHIZjXIvunYA86YKK6m+QARxV7JSzFvuObucmEcUbHNBPsuALntDCdP7rsfZBP89Hh3oSYoM2+QZHrHerViXlLAWUZDpKyAjn01i7FA4wQG6u5Mel1isZgSfVubQ1ygfO1CwXL7MnAQmyLB5/IRPcHThOmQuXD1eFbx73Y1Fte475cg1D6PlqYrWuSFZuY3WAIGSeEE0oh1rD6RL7/yubyKxHL7JyQPOE32rK7JHrBa2TsQeWaE0QjT/ORM2d65MQXcD0jpyl0zLmIWMQrJiLFEUzFBQsy1cMJMsCZRKMfip5r+xdGjZ21MXV/n9cG8HFC5m9okNXyu36umLUbLecRfCJxyC5YSKqFUQC6+Kh2WeEBgmuKghIeYNN2JQkOLV5wpuWEZD9AHJNr6kIA8QmJTWJrBwRGBAr8119Hm6cVUuTM4rz2QMExFWrP8oIAq5vpuM+Z63ZWgKQxWIbRc2Q5RdWlElSJ6rIeUUflztcdAsw4faecbVms058Bh1Tt+WNmGrPuq2kL8DA/FPjg3qe8Z7A1xGBLF3pkVEBfA5MrxWrhyDsWVeSrW9auSqpsK3aec7a5mYJOaxTBRqyCYvu5XtZwjHYY7+dcxcuH28X5kOL1kKZhLnkKZKRuzwS+CYOQvARi8RovQ+J4JaQXtL216KxJjt0hMvyVrvENljWewGkIBfZiiT8Ys8M6M2Y/rqX9Xj3ateoyyxupetnu+NFHon55Vb31sMGSc64VAGob2VoL3/vaQ2eOZBco238ZS2z7lqQXMplCKCKI4m64V2BjlUPpQ8pUgjuU6lNaW6EMJWSepiXvWljXxwXQVOP+zZPss2faD9LRJYn4lzpAf8jfc8qXzGbKkrfg4bpaUL9vYT5W2cJKi2nkeEJaFJ+mtXoCWJv6ReVvfxD8j4syv79MTZ+bwiKnu7ipvcteiSUgqOHtFA0aYymDdaXzBhKxAkOCIKp4lS4vPj7KD/FXfmC6aI2s80DwCXhgVWuwtd09O6a84ZVuf/EFLRA6rvwSL+rP6Z9W++QU=</diagram></mxfile>
18 changes: 9 additions & 9 deletions document/test/test_front_coverage.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
目前还不能用。

# 基本流程
1. jscover加工前端代码,使用filesystem模式,生成加入插桩代码后的前端代码
2. 修改nginx的conf文件,使代理插桩后的前端代码(需要杀光nginx进程才能使得更改conf文件有效)
3. 在每个webdriver要被销毁之前,调用jscoverage_serializeCoverageToJSON函数生成jscoverage.json文件。
0. 我们接下来会要启用local-storage,但在这个模式下生成的jscoverage.js文件是存在bug的。我们需要先用jscover在非local-storage模式下生成一个jscoverage.js,然后复制保存下它,再继续操作。
1. jscover加工前端代码,使用filesystem模式,生成加入插桩代码后的前端代码,注意要启用local-storage模式。
2. 将之前保存下来的非local-storage模式下的jscoverage.js拿出来,覆盖掉生成的local-storage模式下的jscoverage.js。
3. 修改nginx的conf文件,使代理插桩后的前端代码(需要杀光nginx进程才能使得更改conf文件有效)
4. 修改测试代码,使得在每个webdriver要被销毁之前,调用jscoverage_serializeCoverageToJSON函数生成jscoverage.json文件。
* 因为每个Testcase都有一个webdriver,所以我们为每一个testcase准备一个文件夹,然后在该文件夹下生成jscoverage.json文件。
* __`注意每一次driver的get, 或者location.herf(也就是任何一次url的变换)都会清空js的内存,也就是说jscoverage的数据会在页面跳转的时候被清空,所以我们每次页面跳转之前都需要保存一个jscoverage。不过目前我还没做这项工作。`__[这篇博客](http://www.cnblogs.com/rgqancy/p/6878275.html)讲了原因。
4. 使用jscover的merge指令合并上一步产生的jscoverage.json们,将合并的jscoverage.json放在和jscoverage.html同目录下。
5. 修改jscoverage.js文件,将jscoverage_isReport改为true
5. 使用jscover的merge指令合并上一步产生的jscoverage.json们,将合并的jscoverage.json放在和jscoverage.html同目录下。
6. 修改jscoverage.js文件,将jscoverage_isReport改为true

var jscoverage_isReport = true;
6. 使用edge打开jscoverage.html
7. 使用edge打开jscoverage.html
* 不能使用chrome,因为chrome禁止本地的文件访问。当然好像存在选项改,但还是直接Edge方便。
16 changes: 16 additions & 0 deletions document/test/test_howto.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
该文件描述了一些不能放进报告中,但具体操作中会用到的东西。


# 测试数据库
使用`test/fixture.json`作为主要的测试数据库。但要注意,目前还使用`fixture_for_split_page.json`作为测试前端的切页功能时的追加数据库,在测试切页时需要加载它。

通过以下指令获取:

python manage.py dumpdata -e contenttypes -e admin -e auth.Permission --natural-foreign --indent=2 > test/fixture.json

通过以下指令加载(注意是追加式的加载):

python manage.py loaddata test/fixture.json

# 后端-同质合并-测试逻辑与测试数据分离
详见在[test_auto_back.md](test_auto_back.md)
27 changes: 23 additions & 4 deletions document/test/test_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,14 @@
不过要注意一点,因为本机环境下无法使用https(django不支持),所以需要手动将前端代码中的所有https都替换成http。

## 代码覆盖率计算方法
目前没有
使用jscover,启用local-storage来支持跨页面的插桩记录存取

尝试过jscover,但jscover的原理是对js代码插桩,并使用一个js全局变量来存放覆盖率结果。然而js全局变量无法跨页面存在,所以一旦一个测试样例中出现了页面跳转,那么覆盖率就会丢失一部分。而我们的网站目前是一定要求从首页进入的线性访问模式,故而页面跳转是必须的。所以目前无法使用jscover来获取代码覆盖率。合适的替代品目前仍未找到。
基本流程如下:
1. 使用jscover对前端js文件插桩。
2. 修改测试代码,使得每个WebDriver销毁前会保存插桩记录。
3. 合并插桩记录,得到覆盖率报告。

不过需要注意的是,仅仅只对**js文件**插桩,裸写在html文件中的js代码不会被纳入覆盖率的统计中。

## 测试思路
细的来说:
Expand Down Expand Up @@ -211,21 +216,35 @@
* 待废弃。


# bug管理
我们使用issue来进行bug管理。流程如下:
1. 测试人员发现bug,发布issue,将其assign给相关人士。
2. 相关人士处理bug,发布commit,回复测试人员。
3. 测试人员检查是否确实处理,并进行回归测试。
1. 若一切正常,关闭issue。
2. 若出现问题,继续讨论解决。

# Alpha阶段测试结果
具体哪些bug这里就不列出了。都可以在[github的issue](https://github.com/noenergysoftware/rateMyCourse/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aclosed+)中找到。测试人员发现的bug都有打上相应的标签。
## 前测试点
commit: 666cc6afa8556d0618d630e9118f1df88518e994

共47个测试样例,全部通过。

* bug数:4
* invalid数:2

目前没有找到合适的工具来和selenium配合获取代码覆盖率。
JS代码覆盖率:
因为较晚才弄明白到底该怎么配合使用JSCover和Selenium,所以覆盖率还没有刷高。
![](alpha_front_coverage.png)

## 后测试点
commit: 55890581df5543ce2e34768306f72bf01e62c867

共31个测试样例,全部通过。

* bug数:4
* invalid数:8

代码覆盖率
Python代码覆盖率
![](alpha_back_coverage.png)

0 comments on commit 3cf79e7

Please sign in to comment.