Добавьте заголовки к URL-адресу домашней страницы с помощью browsermob в автоматизации тестирования транспортира - PullRequest
1 голос
/ 11 марта 2019

Я пытался интегрировать browsermob-proxy-node со структурой protractor-cucumber-typcript.Для добавления заголовков на домашнюю страницу моего приложения.Сценарий таков, что если заголовки добавляются в приложение, пользователь может выполнить единый вход на домашнюю страницу.

похоже, что он не работает, заголовки не добавляются, поэтому страницавыходит из строя.Может ли кто-нибудь проверить мой код, чтобы убедиться в правильности моих действий?

const { BeforeAll, After, AfterAll, Status, setDefaultTimeout, Before } = require("cucumber");
import { browser } from "protractor";
import * as path from "path";
import log4js = require('log4js');
import { JsonFormatter, UsageJsonFormatter } from "cucumber";
var env = require('../../data/url');
var headersToSet = {    
    'CORPID': 'UserID',
    'MEMBEROF': 'mensa'
}

BeforeAll(function (done) {    
    browser.params.proxy.addHeader(browser.params.proxyData.port, headersToSet, function(err, resp){
        if(!err){
            browser.params.proxy.startHAR(browser.params.proxyData.port, 'test', function(err, resp){
                if(!err){
                    console.log("good for you");
                    done();
                }else{
                    console.log("Start HAR failed");
                }            
            });    
        }   else{
            console.error("Error setting up custom headers")
            browser.params.proxy.stop(browser.params.proxyData.port, function(){
            });
        }        
    })    
  });  

Before(async function () {
    await browser.logger.info("inside before hook");
    let testappURL = env.getURL();    
    await browser.get(testappURL); 
    await browser.sleep(20000);        
});

After(async function (scenario) {   
    await browser.logger.info("inside after hook");     
    if (scenario.result.status === Status.FAILED) {
        // screenShot is a base-64 encoded PNG
        const screenShot = await browser.takeScreenshot();
        this.attach(screenShot, "image/png");        
    }
    // var harData = await browser.params.proxy.getHAR(browser.params.proxyData.port) 
    // await  console.log('harData', harData);
});

AfterAll(function (done) {
    console.log('after ALL');
    browser.params.proxy.getHAR(browser.params.proxyData.port, function (err, harData) {
        console.log('harData', harData);
        browser.quit().then(function () {
            done();
        });
    });
});

Вот мои conf.ts

let path = require('path');
import * as fs from "fs";
import { browser, Config } from "protractor";
import { Reporter } from "../support/reporter";
import { util } from "../utils/test";
var log4js = require("log4js");
import * as oracledb from 'oracledb';
const jsonReports = process.cwd() + "/reports/json";
const logs = process.cwd() + "/logger/lo.txt";
var baseDir = path.resolve(__dirname, '../..');
console.log("Base Dir: " + baseDir);
var Proxy = require('browsermob-proxy').Proxy,
    proxyHost = 'localhost',
    Q = require('q');

export const config: Config = {
    params: {
        environment: 'dit', //fdi or rit can be passed from cmd line        
        platform: 'browser'
    },

    seleniumAddress: "http://localhost:4444/wd/hub",

    SELENIUM_PROMISE_MANAGER: false,


    // baseUrl: env.get(browser.params.environment),


    capabilities: {
        'browserName': 'chrome',
        'args': ['-disable-dev-shm-usage'],
        shardTestFiles: false,
        maxInstances: 5,
        'chromeOptions': {
            'perfLoggingPrefs': {
                'enableNetwork': true,
                'enablePage': true
                //'enableTimeline': false
            }
        },
        proxy: {
            proxyType: 'manual',
            httpProxy: 'localhost:8888'            
        },
        loggingPrefs: {
            performance: 'INFO',
            browser: 'ALL'
        }
    },

    framework: "custom",
    frameworkPath: require.resolve("protractor-cucumber-framework"),

    specs: [baseDir + '/features/automation/regression/*.feature'],


    onPrepare: () => {
        browser.ignoreSynchronization = true;
        browser.manage().timeouts().implicitlyWait(12000);
        browser.manage().window().maximize();
        Reporter.createDirectory(jsonReports);
        log4js.configure("./config/log4js.json");
        browser.logger = log4js.getLogger("default");
        browser.logger2 = log4js.getLogger("another");
        browser.logger3 = log4js.getLogger("file");
        var proxy = new Proxy();

        return Q.ninvoke(proxy, 'start', 8888).then(function (data) {
            console.log('data', data);
            console.log('arguments', arguments);
            browser.params.proxy = proxy;
            browser.params.proxyData = data;                       
            return data;
        }, function () {
            console.log('start failed');
        });


        // hooks.createDirectory(logs);
        //return env.get(browser.params.environment);
    },

    beforeLaunch: () => {
        if (fs.existsSync('./logs/ExecutionLog.log')) {
            fs.unlinkSync('./logs/ExecutionLog.log');

        }
    },

    cucumberOpts: {
        compiler: "ts:ts-node/register",
        format: "json:./reports/json/cucumber_report.json",
        require: [
            baseDir + '/typeScript/stepdefinitions/*.js',
            baseDir + '/typeScript/support/*.js',
            baseDir + '/dbUtils/index',
            baseDir + '/data/url'
        ],
        strict: true,
        tags: "@apptest",
        restartBrowserBetweenTests: true
    },

    onComplete: () => {
        Reporter.createHTMLReport();
        return Q.ninvoke(browser.params.proxy, 'stop', browser.params.proxy);
    },
};

Вот некоторые из использованных мной ресурсов: -https://github.com/afternoon/protractor-browsermob-test https://github.com/zzo/browsermob-node

...