কিউজিআইএস প্লাগইনগুলির জন্য স্বয়ংক্রিয় পরীক্ষাগুলি লিখছেন?


16

আমি পাইথনে লিখিত কিউজিআইএস প্লাগইনগুলির জন্য স্বয়ংক্রিয় পরীক্ষা লেখার জন্য পরামর্শ খুঁজছি for

আমি পাইথন স্ক্রিপ্টগুলির জন্য অতীতে পাইউউনিত ( unittestমডিউল) ব্যবহার করে পরীক্ষাগুলি লিখেছি , তবে জিইউআই সহ কোনও অ্যাপ্লিকেশনের জন্য এটি কখনও করি নি। আমি কিউটি উইজেটগুলিতে ইউনিট পরীক্ষার জন্য পাইকিউটি ৪.কিউ টেস্ট ব্যবহার করার পদ্ধতি বর্ণনা করার একটি পৃষ্ঠা পেয়েছি ( http://www.voom.net/pyqt-qtest-example ), তবে আমি কীভাবে এটি ব্যবহার করতে পারি তা জানার জন্য আমি লড়াই করছি একটি উইজেট যা QGIS এর মধ্যে থেকে চালানোর জন্য ডিজাইন করা হয়েছে with

পাইকিজিআইএস ডকুমেন্টেশনের "টেস্টিং" বিভাগটি উল্লেখযোগ্যভাবে অনুপস্থিত।

আমার এখন পর্যন্ত যা আছে তা হ'ল:

  • বিচ্ছিন্ন মডিউল বা ফাংশনগুলিতে ডেটার প্রকৃত প্রক্রিয়াকরণ রাখুন এবং সেইগুলির জন্য ইউনিট পরীক্ষা লিখুন;
  • কিউস্টেস্ট ব্যবহার করে ইউআইয়ের প্রাথমিক পরীক্ষা করা;
  • প্রার্থনা করুন যে কিউজিআইএস-এর মধ্যে থেকে প্লাগইন ব্যবহার করার সময় এটি সমস্ত একত্রে ধারণ করে।

একটি ভাল উপায় আছে কি?

উত্তর:


11

কিউজিআইএস প্লাগইনগুলি পরীক্ষা করার দক্ষতা (বিশেষত ওপি হাইলাইট হিসাবে একটি QGIS পরিবেশের মধ্যে ইন্টিগ্রেশন টেস্টিংয়ের প্রশ্ন) খুব বেশি উন্নতি করেছে a আমি আশা করি এই আপডেটটি সমসাময়িক পাঠকদের পাশাপাশি ওপিতে সহায়তা করবে।

অপার জুলাই 2016 সালে একটি আবশ্যক পঠিত নিবন্ধ প্রকাশ যে কেউ QGIS পরীক্ষার স্বয়ংক্রিয় প্লাগিন এনটাইটেল সম্পর্কে গুরুতর জন্য; পাইথন প্লাগইনগুলির জন্য কিউজিআইএস অবিচ্ছিন্ন একীকরণ পরীক্ষার পরিবেশ । এটি তাদের ব্যবহার করার পদ্ধতি এবং সরঞ্জামগুলি বর্ণনা করে - এগুলি সমস্তই মুক্ত উত্স। মূল বিষয়গুলি হ'ল: -

  • তাদের বিশেষ প্লাগইন পরীক্ষক QGIS যা পরীক্ষার স্বয়ংক্রিয় করতে ভিতরে QGIS পরিবেশ
  • একটি পাত্রে-বেস পরিবেশে বিভিন্ন কিউজিআইএস সংস্করণ / কনফিগারেশনের বিরুদ্ধে পরীক্ষা করার অনুমতি দিয়ে ডকার কিউজিআইএস চিত্রগুলির ব্যবহার
  • একটি বিশেষ ডকার কিউজিআইএস চিত্র , যা নিজেই কিউজিআইএস পরীক্ষার জন্য ব্যবহৃত হয়, তবে যা - অনুরোধ qgis_testrunner.shকরে একটি প্লাগইনে ইউনিট পরীক্ষা চালাতে ব্যবহার করা যেতে পারে
  • ব্যবহারের ট্রাভিস সি আই একটানা ইন্টিগ্রেশন জন্য - অর্থাত পূর্ণ পরীক্ষা স্যুট প্রতিটি নতুন কোড সহ চালানো হয় কমিট

আপনি যদি ট্র্যাভিস সিআই / ডকারের সাথে পরিচিত হন তবে এটি সেট আপ করা অপেক্ষাকৃত সহজ হওয়া উচিত। তারা নিম্নলিখিত 4 টি পদক্ষেপ বর্ণনা করে এবং এইভাবে সেট আপ করা তাদের নিজস্ব প্লাগইনগুলির 2 টি উদাহরণ সরবরাহ করে।

  1. কিউজিআইএস পরীক্ষার পরিবেশের সাথে ডকার চিত্রটি টানুন এবং এটি চালান
  2. প্লাগইন ইনস্টল করতে এবং পরীক্ষার রানার জন্য কিউজিআইএস প্রস্তুত করতে qgis_setup.sh NameOfYourPlugin চালান
  3. আপনার প্লাগইনটি তৈরি করতে প্রয়োজনীয় সমস্ত অপশন অপশনালিকভাবে সম্পাদন করুন
  4. ডকারের অভ্যন্তরে পরীক্ষার রানার চালাও qgis_testrunner.sh

আপনি সেরা অনুশীলনের জন্য বলেছেন এবং আজকের দিনে আমি অবশ্যই এটি বিবেচনা করব। কিউজিআইএস ডক্স এখনও প্লাগইন পরীক্ষার জন্য একটি উত্সর্গীকৃত বিভাগ নেই (আমি আশা করি এটি শীঘ্রই পরিবর্তিত হবে) তবে "প্রার্থনা করুন যে এটি সব একসাথে ধারণ করে" পদ্ধতির অবশ্যই আর একমাত্র বিকল্প নেই।


4
বাউন্ডলেস আর নেই। কেউ কি এই বিষয়বস্তু সংরক্ষণ করেছে?
পেড্রো কামারগো

8

দেখে মনে হচ্ছে এটি একক পাইথন অ্যাপ্লিকেশনটিতেunittest লোড পাইথন প্লাগইনগুলি পরীক্ষা করার জন্য ব্যবহার করা সম্ভব ।

qgis.core.iface স্বতন্ত্র অ্যাপ্লিকেশনগুলি থেকে পাওয়া যায় না, তাই আমি একটি ডামি উদাহরণ লিখেছি যা কোনও ফাংশন দেয় যা এতে প্রদত্ত যে কোনও যুক্তি গ্রহণ করবে এবং অন্য কিছু করবে না। এর অর্থ হল যে কলগুলি self.iface.addToolBarIcon(self.action)ত্রুটি নিক্ষেপ করবেন না।

নীচের উদাহরণটি একটি প্লাগইন লোড করে myplugin, এতে মানচিত্র স্তর রেজিস্ট্রি থেকে নেওয়া লেয়ার নামগুলির সাথে কিছু ড্রপ ডাউন মেনু রয়েছে। মেনুগুলি সঠিকভাবে স্থাপন করা হয়েছে কিনা তা পরীক্ষা করে পরীক্ষা করে দেখা হয় এবং এর সাথে যোগাযোগ করা যেতে পারে। আমি নিশ্চিত নই যে এটি প্লাগইন লোড করার সর্বোত্তম উপায় কিনা তবে এটি কার্যকর বলে মনে হচ্ছে।

মাইপলগিন উইজেট

#!/usr/bin/env python

import unittest

import os
import sys

# configure python to play nicely with qgis
osgeo4w_root = r'C:/OSGeo4W'
os.environ['PATH'] = '{}/bin{}{}'.format(osgeo4w_root, os.pathsep, os.environ['PATH'])
sys.path.insert(0, '{}/apps/qgis/python'.format(osgeo4w_root))
sys.path.insert(1, '{}/apps/python27/lib/site-packages'.format(osgeo4w_root))

# import Qt
from PyQt4 import QtCore, QtGui, QtTest
from PyQt4.QtCore import Qt

# import PyQGIS
from qgis.core import *
from qgis.gui import *

# disable debug messages
os.environ['QGIS_DEBUG'] = '-1'

def setUpModule():
    # load qgis providers
    QgsApplication.setPrefixPath('{}/apps/qgis'.format(osgeo4w_root), True)
    QgsApplication.initQgis()

    globals()['shapefile_path'] = 'D:/MasterMap.shp'

# FIXME: this seems to throw errors
#def tearDownModule():
#    QgsApplication.exitQgis()

# dummy instance to replace qgis.utils.iface
class QgisInterfaceDummy(object):
    def __getattr__(self, name):
        # return an function that accepts any arguments and does nothing
        def dummy(*args, **kwargs):
            return None
        return dummy

class ExamplePluginTest(unittest.TestCase):
    def setUp(self):
        # create a new application instance
        self.app = app = QtGui.QApplication(sys.argv)

        # create a map canvas widget
        self.canvas = canvas = QgsMapCanvas()
        canvas.setCanvasColor(QtGui.QColor('white'))
        canvas.enableAntiAliasing(True)

        # load a shapefile
        layer = QgsVectorLayer(shapefile_path, 'MasterMap', 'ogr')

        # add the layer to the canvas and zoom to it
        QgsMapLayerRegistry.instance().addMapLayer(layer)
        canvas.setLayerSet([QgsMapCanvasLayer(layer)])
        canvas.setExtent(layer.extent())

        # display the map canvas widget
        #canvas.show()

        iface = QgisInterfaceDummy()

        # import the plugin to be tested
        import myplugin
        self.plugin = myplugin.classFactory(iface)
        self.plugin.initGui()
        self.dlg = self.plugin.dlg
        #self.dlg.show()

    def test_populated(self):
        '''Are the combo boxes populated correctly?'''
        self.assertEqual(self.dlg.ui.comboBox_raster.currentText(), '')
        self.assertEqual(self.dlg.ui.comboBox_vector.currentText(), 'MasterMap')
        self.assertEqual(self.dlg.ui.comboBox_all1.currentText(), '')
        self.dlg.ui.comboBox_all1.setCurrentIndex(1)
        self.assertEqual(self.dlg.ui.comboBox_all1.currentText(), 'MasterMap')

    def test_dlg_name(self):
        self.assertEqual(self.dlg.windowTitle(), 'Testing')

    def test_click_widget(self):
        '''The OK button should close the dialog'''
        self.dlg.show()
        self.assertEqual(self.dlg.isVisible(), True)
        okWidget = self.dlg.ui.buttonBox.button(self.dlg.ui.buttonBox.Ok)
        QtTest.QTest.mouseClick(okWidget, Qt.LeftButton)
        self.assertEqual(self.dlg.isVisible(), False)

    def tearDown(self):
        self.plugin.unload()
        del(self.plugin)
        del(self.app) # do not forget this

if __name__ == "__main__":
    unittest.main()

4
আমি তখন থেকে এখানে এই উত্তরের উপর ভিত্তি করে একটি নিবন্ধ লিখেছি: snorf.net/blog/2014/01/04/…
স্নারফালোরপাগাস

3

আমি একসাথে একটি ডমিআইন্টারফেসও রেখেছি, যা আপনাকে কিউজিআইএস প্লাগইনগুলির স্বতন্ত্র পরীক্ষা করতে সক্ষম করে। স্নোরফলোরপাগাস ব্লগটি পড়ার পরে, আমার উত্তরটি এখানে দেখুন

একটি বাস্তব জীবনের উদাহরণ খুঁজতে, কীভাবে আমি পরীক্ষা (ইডি) QGIS-প্লাগিন এ GitHub প্রকল্পের যান https://github.com/UdK-VPT/Open_eQuarter/tree/master/mole এবং মধ্যে একটি চেহারা আছে পরীক্ষার - প্যাকেজ।


-1

এটি সহায়তা করতে পারে: কিউস্টেস্ট এবং ইউনিটেটেস্টের সাথে পাইকিউইটি জিইউআই পরীক্ষা করুন


1
এটাই এই "এই পৃষ্ঠাটি" প্রশ্নের সাথে লিঙ্কযুক্ত (স্বীকার করা খুব স্পষ্টভাবে নয়)। আমার সমস্যাটি হল, আমি কীভাবে একটি ইন্টারফেস পরীক্ষা করব যা কিউজিআইএস-এর স্তরগুলির সাহায্যে কম্বো বাক্সগুলির মতো চালানোর জন্য নকশাকৃত।
স্নোরফলোরপাগাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.