Before using phpTest, it's a good idea to get an overview of the system and how all of the different pieces tie together. phpTest has several components which interact with each other to make the tests.
The most basic component is the subject. Subjects are a way to group similar questions together. For instance, you may choose to make a subject called Linux. Whenever you add a test question that has to do with Linux, you would assign it the Linux subject. You can name the subject whatever you want. When you create a new test, the questions on the test are chosen based on the test's subject.
The next component is the question. Questions make up the test. Each question must have an associated subject. Questions can be either True/False or Multiple Choice. Essay questions are implemented, but disabled because the automatic scoring system doesn't work with them. I'm going to work on getting them ready for a future release. A question can be either required or optional. Required questions are included on every test with the same subject as the questions. Optional questions are chosen randomly based on the test parameters.
At this point we need to digress a bit to explain how the tests are generated. Let's say on a test we have 4 required questions and 2 random questions. When the test gets generated, it first randomizes the required questions and puts them on the test. Then, it randomly selects the number of random questions and adds them to the test. For instance, lets pretend that we have 4 required questions and 10 random questions total for our Windows 95 subject. When the My Windows 95 test is generated, the same 4 required questions will be on the test every single time. However, since there are only supposed to be 2 random questions on the test, the program randomly grabs 2 out of the 10 possible random questions and adds them. The effect of this is that the test is different every time it is taken. The questions might be the same, but they will be presented in a different order. This helps to discourage cheating and presents a greater challenge to the test takers.
The next component is the test. Tests should be created after you have created the subjects and questions. When creating a test, there are several parameters such as Test Title, number of required questions, and number of random questions. When a user is taking a test, the questions are randomized so that no two tests are exactly the same. This discourages cheating. Also, multiple choice questions are randomized so that the answer is different each time. For instance, the answer to a multiple-choice question may be 'a' once, but if the agent refreshes the page, the answer might be 'b' next time. The correct answer stays the same, but the order of the possible answers is changed. Because a slightly different test might be generated each time the user presses refresh, the test questions are stored in a database table until they complete the test. This prevents a user from pressing refresh to get different questions. Once a test is created, it is given a start date and an end date. The test is only available to be taken between the start and end date. If you want to deactivate a test, set its end date to sometime in the past.
Each user who wants to use the system needs to have his or her own account. Users are grouped together in groups (described below) to determine who can view each test. Regular users can also be granted partial admin access, which is discussed in detail in a later section. User accounts can be added by administrators, or optionally a person can register his own account if the admin has enabled that functionality.
Groups are a way to group similar users together. Each test is assigned a group when created. Only people who belong to the same group as the test will be able to take the test when it is active. People who are not in the same group will not be able to see the test, even if it is active. Users can belong to multiple groups.